[英]How to get all the yyyymm dates between two dates which are in yyyymm format in SAS?
我有兩個不同的日期201509和201608。我想以yyyymm格式獲取它們之間的所有日期,例如(201509,201510,201511,201512,201601,201602,201603,201604,201605,201606,201607,201608)。 問題是幾年之間的幾個月。 另外,這幾個月一直在變化,可能只是201601到201612。這是每天運行的代碼,我正在嘗試在SAS中使其自動化。 任何幫助表示贊賞!
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;
如果它們已經是日期格式,則在間隔上添加一天,它可以像
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;
邏輯如下。
For intY = intStartYear To intEndYear
If intY = Value(intEndYear) Then intZ = Value(intEndMonth) Else intZ = 12
For intX = intStartMonth To intZ
If intX < 10 Then
Print intY & "0" & intX
Else
Print intY & intX
End If
Next intX
intStartMonth = 1
Next intY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.