2015-03-19 14 views
1

我每週四都有一份SAS工作,但有時需要在週三或週二晚上運行。該工作每隔4周收集一些數據直到最近的星期日。例如,今天我們有2015年的19月,我需要的數據直到2015年3月15日。找到上週日並在SAS中每週向後推遲4周

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; 

無論如何,我可以自動完成這個?

+1

查看'intnx'和'today'函數的文檔。 – user667489 2015-03-19 08:46:10

回答

5

我會從@ user667489建議擴大,因爲它可能需要一段時間去解決它。關鍵是要使用week時間間隔,默認情況下在週日開始(你可以用一個移位索引的改變這一點,讀this進一步的細節)

所以,你的查詢只需要爲:

where intnx('week',today(),-4)<date<=intnx('week',today(),0); 
0

您可以嘗試使用工作日函數獲取上一個星期日期,然後使用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; 

讓我知道這是否有幫助!

1

使用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; 
相關問題