标记一个月内的整周,包括其他月份的剩余天数
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.
我有一个包含日常数据的数据集。我需要创建一个变量,它会带来每个月的周数(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.