Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在SAS中查找上周日和每周向后4周_Date_Sas - Fatal编程技术网

Date 在SAS中查找上周日和每周向后4周

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_

我有一个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;
  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函数的文档。