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

Marking full weeks inside a month including remaining days from other months

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

我已经用下面的公式达到了:

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

它工作正常,但一个月的第一周和最后几周通常不是完整的周,所以该行只带来部分周。我需要对其进行改进,将上个月或下个月的剩余天数计算在内,以便让每周有 7 天。

有什么想法吗?

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

/* 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 周没有特殊意义。 week('31dec2006'd, 'u') 的值为 53.

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

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