我有时间序列数据。数据如下所示:
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
我想创建一个虚拟变量,如果日期是12月,则它等于1,它是在第二个星期四之前或之后。如果日期是12月和第二个星期四之后,它等于0。如果月份(日期)^ = 12,则等于丢失。
任何人都可以教我如何识别12月的第二个星期四并解决这个问题。
答案 0 :(得分:1)
对于没有SAS 9.3+并且无法使用nwkdom
执行此操作的人,这是另一种方法:
Dummy = intck('week.5',intnx('month',date,0)-1,date-1) < 2;
这是如何工作的,从内部向外工作:
intnx
用于查找该月的第一天。date
减去1以获得昨天的日期。intck
计算这两个日期之间的星期四(week.5
)。注:这包括昨天,如果它是星期四,但不上个月的最后一天,如果 是星期四。date
目前小于或等于该月的第二个星期四。样本用法:
data _null_;
do date = '01dec2011'd to '30dec2011'd;
Dummy = intck('week.5',intnx('month',date,0)-1,date-1) < 2;
put date weekdate. +1 dummy;
end;
run;
编辑:现在当月的第一天是星期四时正常工作。
答案 1 :(得分:1)
NWKDOM
一个月的第三个星期五,其中月/年是从SAS日期中提取的。
Friday3 = NWKDOM(3, 6, month(sas_date), year( sas_date));
答案 2 :(得分:0)
认为这将解决您的问题。感觉有一个更好的解决方案,但它应该工作。
filter