我有两个不同的日期201509和201608.我希望得到它们之间的所有日期格式为yyyymm(201509,201510,201511,201512,201601,201602,201603,201604,201605,201606,201607,201608) )。问题是解决几年之间的几个月。此外,几个月不断变化,它可能只是201601到201612.它是一个日常运行代码,我试图在SAS中自动化它。任何帮助赞赏!
答案 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;
答案 1 :(得分: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;
答案 2 :(得分:0)
逻辑在下面。
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