在一个月内标记整周,包括其他月份的剩余天数

时间:2017-06-27 22:06:30

标签: date sas week-number

我有一个包含每日数据的数据集。我需要创建一个变量,它带来每个月的周数(1到(4或5))。

我已通过以下公式达到:

 WK_NUM = intck('week',intnx('month',DATE,0),DATE)+1;

它工作正常,但通常本月的第一周和最后几周都不是整周,所以该行只会带来部分周。我需要改进它以带来上个月或下个月的剩余天数,以便每周填充7天。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

希望这会产生预期的结果:

/* initial data set with dates */
data a;
  format date date9.;
  do date="15apr2017"d to "15jun2017"d;
   output;
  end;
 run;

/* adding week number */
data a;
  set a;
  wk_num = week(date,'u');
run;

/* selecting May and modifying wk_num */
proc sql noprint;
  CREATE TABLE b AS
  SELECT date
    ,wk_num - ((SELECT min(wk_num) FROM a WHERE date="01may2017"d)-1)
  FROM a
  WHERE wk_num between (SELECT min(wk_num) FROM a WHERE date="01may2017"d) AND (SELECT max(wk_num) FROM a WHERE date="31may2017"d)
  ;
quit;

周功能选项:

u (默认值):指定一年中的周数。星期日被认为是一周的第一天。星期数值表示为0-53范围内的十进制数。第53周没有特别的意义。周的值('31dec2006'd,'u')是53。

v :指定其值在1-53范围内表示为十进制数的周数。星期一被认为是一周的第一天,一年的第1周是包括1月4日和一年的第一个星期四的一周。如果1月的第一个星期一是第2个,第3个或第4个,则前几天是前一年的最后一周的一部分。

w :指定一年中的周数。星期一被认为是一周的第一天。星期数值表示为0-53范围内的十进制数。第53周没有特别的意义。周的值('31dec2006'd,'w')是53。