如何使用sas识别特定月份的第三个星期五

如何使用sas识别特定月份的第三个星期五,sas,Sas,我有一个时间序列数据。数据如下所示: date variable 01-Dec-2012 0.1 02-Dec-2012 0.1 03-Dec-2012 0.1 04-Dec-2012 0.1 05-Dec-2012 0.1 ... 20-Dec-2012 0.1 21-Dec-2012 0.1 22-Dec-2012 0.1 我想创建一个虚拟变量,如果date在12月,并且在第二个星期四之前或之后,那么它等

我有一个时间序列数据。数据如下所示:

date            variable
01-Dec-2012     0.1
02-Dec-2012     0.1
03-Dec-2012     0.1
04-Dec-2012     0.1
05-Dec-2012     0.1
...
20-Dec-2012     0.1
21-Dec-2012     0.1
22-Dec-2012     0.1
我想创建一个虚拟变量,如果date在12月,并且在第二个星期四之前或之后,那么它等于1。如果日期在12月且在第二个星期四之后,则等于0。如果月(日)^=12,则等于缺失


谁能教我如何识别12月的第二个星期四并解决这个问题。

我想这会解决你的问题。有一种感觉,这是一个更好的解决方案,但它应该工作

data YourData;
format date date9. ;
do i=1 to 100 ;
date=intnx('day', '17oct03'd,i);
var=rand('uniform');
output;
end;
drop i;
run;

Data Find;
set YourData;
Month=month(date);
day=day(date);
Weekday=WEEKDAY(date);

/* weekday=5 this is thursday */
if weekday=5 and month=12 then flag=1;

/* flag2 retains the value */
flag2+flag;

if month=12 and flag2 < 2 then Dummy=1;
else if month=12 and flag2=2 and flag=1 then Dummy=1;
else if month=12 then Dummy=0;
else Dummy=.;

run;    
data-YourData;
格式化日期9;
i=1到100;
日期=intnx('day','03年10月17日,i);
var=兰德(“统一”);
输出
终止
第一滴;
跑
数据发现;
设置您的数据;
月=月(日);
天=天(日期);
工作日=工作日(日期);
/*这是星期四*/
如果工作日=5,月份=12,则标志=1;
/*flag2保留该值*/
flag2+标志;
如果月份=12且flag2<2,则虚拟值=1;
否则,如果月份=12,标志2=2,标志=1,则虚拟=1;
否则,如果月份=12,则虚拟=0;
else Dummy=。;
跑

对于没有SAS 9.3+且无法使用
nwkdom
执行此操作的人,这里有另一种方法:

Dummy = intck('week.5',intnx('month',date,0)-1,date-1) < 2;
编辑:当一个月的第一天是星期四时,现在可以正常工作。

NWKDOM

一个月中的第三个星期五,从SAS日期中提取月/年

Friday3 = NWKDOM(3, 6, month(sas_date), year( sas_date));

您是否查看了可用的日期功能?通过使用诸如月(日期)、周(日期)和日(日期)之类的函数,这应该很容易。如果月的第一天是星期五,则周(日期)=1,但本周四不是本月的第一个星期四。我被困在这里了。工作日()应该会有帮助。制定解决方案。你的主题行和最后一行要求不同的东西。第三个星期五还是第二个星期二?这似乎并不适用于所有时间段。如果do循环提前一年开始,那么虚拟对象将识别第三个星期四(2011年12月)。@Jonas Fixed,我想Reeza的意思是Friday3=NWKDOM(3,6,month(sas_date),year(sas_date));这似乎是最简单的解决方案,如果您的月后星期四=12,则可以进行更改。
Friday3 = NWKDOM(3, 6, month(sas_date), year( sas_date));