我有一个包含每日数据的数据集。我需要创建一个变量,它带来每个月的周数(1到(4或5))。
我已通过以下公式达到:
WK_NUM = intck('week',intnx('month',DATE,0),DATE)+1;
它工作正常,但通常本月的第一周和最后几周都不是整周,所以该行只会带来部分周。我需要改进它以带来上个月或下个月的剩余天数,以便每周填充7天。
有什么想法吗?
答案 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。