[英]How to calculate the number of days of first week of the month in SAS.if we consider Saturday as first week day
我正在使用 intnx function。
date1=intnx('qtr',"01APR2021"d,0,'b');
我正在考虑遵循算法-
1.检查上个月的最后一天是否不是星期五。
2.计算直到星期五出现的天数(当前月份)。
谁能帮我这个?
使用INTNX
计算当月的第一天,然后使用WEEKDAY
计算第一周的天数。
WEEKDAY
function 结果是
1st-want 1st_want-v2
1 Sunday 1 2
2 Monday 2 3
3 Tuesday 3 4
4 Wednesday 4 5
5 Thursday 5 6
6 Friday 6 7
7 Saturday 7 1
取决于你想要什么,(假设第一个是星期六,你想要 1 还是 7 作为你的结果?)对于 1,你需要执行额外的计算。
例子:
假设 first 是星期六,您希望在第一周结果中保留 7 天。
data have;
call streaminit (2021);
do _n_ = 0 to 23;
date = intnx('month', '01-jan-2019'd, _n_) + rand('integer', 27);
output;
end;
format date date11.;
run;
data want;
set have;
month_1st = intnx('month', date, 0);
sas_weekday_1st = weekday(month_1st);
result = sas_weekday_1st;
result_v2 = mod(sas_weekday_1st,7) + 1;
format month_1st date11.;
run;
假设提供了月份和年份。
data want;
year = 2020;
month = 1;
start_date = mdy(month, 1, year);
first_friday = nwkdwom(1, 6, month, year);
length_week = start_date - first_friday + 1;
*Toms correction:;
length_week2 = day(nwkdom(1,6,month(date),year(date));
run;
听起来您想知道该月第一个星期五的日期。 因此该月的第一个星期五是该月的一天。
因此,让我们从一个数据集开始,该数据集的月份从一周中的每一天开始。
data example;
input date :date9.;
format date date9.;
dow = weekday(date);
downame=put(date,downame.-l);
cards;
01OCT2000
01MAY2000
01FEB2000
01MAR2000
01JUN2000
01SEP2000
01JAN2000
;
现在我们可以使用带有 WEEK 间隔的 INTNX() function 来查找第一个星期五的日期。 然后,我们可以使用 DAY() function 来查找该星期五的月份日期,从而找出该月第一周的天数。
要获得第一个星期五,请找到包含该月第二天的周末的星期六,然后减去一个以返回星期五。
data want;
set example;
friday = intnx('week',date+1,0,'e')-1 ;
want = day(friday);
want_name=put(friday,downame.-l);
format friday date9.;
run;
结果:
Obs date dow downame friday want want_name
1 01OCT2000 1 Sunday 06OCT2000 6 Friday
2 01MAY2000 2 Monday 05MAY2000 5 Friday
3 01FEB2000 3 Tuesday 04FEB2000 4 Friday
4 01MAR2000 4 Wednesday 03MAR2000 3 Friday
5 01JUN2000 5 Thursday 02JUN2000 2 Friday
6 01SEP2000 6 Friday 01SEP2000 1 Friday
7 01JAN2000 7 Saturday 07JAN2000 7 Friday
要在一个月中的任何一天执行此操作,请使用具有 MONTH 间隔的 INTNX() function 来查找该月的第一天(并添加一个以查找该月的第二天)。
length_week1=day(intnx('week',intnx('month',date,0,'b')+1,0,'e')-1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.