Date 在SAS中查找上周日和每周向后4周
我有一个SAS的工作,每周四运行,但有时它需要运行在周三,也许周二晚上。作业每隔4周收集一些数据,直到最近的星期日。例如,今天我们有2015年3月19日,我需要2015年3月15日之前的数据Date 在SAS中查找上周日和每周向后4周,date,sas,Date,Sas,我有一个SAS的工作,每周四运行,但有时它需要运行在周三,也许周二晚上。作业每隔4周收集一些数据,直到最近的星期日。例如,今天我们有2015年3月19日,我需要2015年3月15日之前的数据 data get_some_data; set all_the_data; where date >= '16Feb2015' and date <= '15Mar2015'; run; 下周我还必须手动更改日期参数 data get_some_data; set all_the_
data get_some_data;
set all_the_data;
where date >= '16Feb2015' and date <= '15Mar2015';
run;
下周我还必须手动更改日期参数
data get_some_data;
set all_the_data;
where date >= '23Feb2015' and date <= '22Mar2015';
run;
无论如何,我可以自动执行此操作?您可以尝试使用weekday函数获取最后一个星期日日期,然后使用INTNX从该星期日日期获取4周后的日期。检查以下参考代码:
data mydata;
input input_date YYMMDD10.;
/* Loop to get the last sunday date, do the processing
and get out of loop */
do i =0 to 7 until(last_sunday_date>0);
/* Weekday Sunday=1 */
if weekday(sum(input_date,-i))=1 then do;
last_sunday_date=sum(input_date,-i);
/* INTNX to get the 4 week back date */
my_4_week_start=intnx('week',last_sunday_date,-4);
end;
end;
format input_date last_sunday_date my_4_week_start yymmdd10.;
datalines4;
2015-03-01
2015-03-07
2015-03-14
2015-03-21
2015-03-28
2015-04-05
2015-04-13
2015-04-20
;;;;
run;
proc print data=mydata;run;
让我知道这是否有帮助 您可以尝试使用weekday函数获取最后一个星期日日期,然后使用INTNX从该星期日日期获取4周后的日期。检查以下参考代码:
data mydata;
input input_date YYMMDD10.;
/* Loop to get the last sunday date, do the processing
and get out of loop */
do i =0 to 7 until(last_sunday_date>0);
/* Weekday Sunday=1 */
if weekday(sum(input_date,-i))=1 then do;
last_sunday_date=sum(input_date,-i);
/* INTNX to get the 4 week back date */
my_4_week_start=intnx('week',last_sunday_date,-4);
end;
end;
format input_date last_sunday_date my_4_week_start yymmdd10.;
datalines4;
2015-03-01
2015-03-07
2015-03-14
2015-03-21
2015-03-28
2015-04-05
2015-04-13
2015-04-20
;;;;
run;
proc print data=mydata;run;
让我知道这是否有帮助 使用INTNX函数将日期回归到上周日:
data get_some_data;
set all_the_data;
lastsun=intnx('week',today(),0);
/*where date >= '23Feb2015' and date <= '22Mar2015';*/
where date between lastsun-27 and lastsun;
run;
使用INTNX函数将日期追溯到上周日:
data get_some_data;
set all_the_data;
lastsun=intnx('week',today(),0);
/*where date >= '23Feb2015' and date <= '22Mar2015';*/
where date between lastsun-27 and lastsun;
run;
我将详细介绍@user667489的建议,因为您可能需要一段时间才能解决这个问题。关键是使用周时间间隔,默认情况下,周时间间隔从星期日开始。您可以使用班次索引对此进行更改,请阅读以了解更多详细信息 因此,您的查询只需要:
where intnx('week',today(),-4)<date<=intnx('week',today(),0);
我将详细介绍@user667489的建议,因为您可能需要一段时间才能解决这个问题。关键是使用周时间间隔,默认情况下,周时间间隔从星期日开始。您可以使用班次索引对此进行更改,请阅读以了解更多详细信息 因此,您的查询只需要:
where intnx('week',today(),-4)<date<=intnx('week',today(),0);
查找intnx和today函数的文档。查找intnx和today函数的文档。