2016-09-22 74 views
0

我有兩個不同的日期201509和201608.我想獲取它們之間的所有日期格式爲yyyymm like(201509,201510,201511,201512,201601,201602,201603,201604,201605,201606,201607,201608) 。這個問題正在解決幾年之間的幾個月。此外,月份不斷變化,可能只是201601至2016年12月。這是一個每日運行代碼,我試圖在SAS中自動運行它。任何幫助感謝!如何獲取SAS中yyyymm格式的兩個日期之間的所有yyyymm日期?

+0

它們是實際的日期數值變量,還是字符變量? – Joe

+0

日期格式數值變量 –

回答

2

SAS的功能可以讓您輕鬆完成此操作,但您必須先將日期轉換爲「SAS日期」。然後,您可以使用INTCK來計算開始和結束之間的月份,並使用INTNX來創建新的月份日期值。

data months; 
    input (start end)(:yymmn.); 
    format start end yymm.; 
    do i = 0 to intck('month',start,end); 
     month = intnx('month',start,i); 
     output; 
     end; 
    format month yymm.; 
    cards; 
201509 201608 
;;;; 
    run; 
proc print; 
    run; 
0

如果他們的日期格式已經再加入到一天的時間間隔,它可以簡單的

where date between '01Jan2016'd and '31Dec2016'd; 

如果你無法每天都搞清楚邏輯,你可以創建宏變量,將爲你做。

%let start=201601; 
%let end=201612; 
%let start_date = %sysfunc(inputn(&start, yymmn6.), date9.); 
%let end_date = %sysfunc(intnx(month, %sysfunc(inputn(&end, yymmn6.)), 0, end), date9.); 
%put &start_date.; 
%put &end_date; 
相關問題