如何使用sas

时间:2016-10-25 11:38:39

标签: 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

我想创建一个虚拟变量,如果日期是12月,则它等于1,它是在第二个星期四之前或之后。如果日期是12月和第二个星期四之后,它等于0。如果月份(日期)^ = 12,则等于丢失。

任何人都可以教我如何识别12月的第二个星期四并解决这个问题。

3 个答案:

答案 0 :(得分:1)

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

Dummy = intck('week.5',intnx('month',date,0)-1,date-1) < 2;

这是如何工作的,从内部向外工作:

  1. intnx用于查找该月的第一天。
  2. 减去1以获取上个月的最后一天。
  3. date减去1以获得昨天的日期。
  4. 使用intck计算这两个日期之间的星期四(week.5)。注:这包括昨天,如果它是星期四,但上个月的最后一天,如果 是星期四。
  5. 如果此数字小于2,date目前小于或等于该月的第二个星期四。
  6. 样本用法:

    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));

http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p1kdveu0ry8ltxn1m3um2ntxs7d5.htm

答案 2 :(得分:0)

认为这将解决您的问题。感觉有一个更好的解决方案,但它应该工作。

filter