Sas 日期范围包括哪些月份?
我有一个数据集,其中包含一组用户注册的起始日期和截止日期。我想通过编程找到每个用户的日期之间的月份,而不必在任何月份进行硬编码,等等。我只想要每个月注册的数字的摘要,所以如果这样做可以更快,那就更好了 我有类似的东西Sas 日期范围包括哪些月份?,sas,date-range,Sas,Date Range,我有一个数据集,其中包含一组用户注册的起始日期和截止日期。我想通过编程找到每个用户的日期之间的月份,而不必在任何月份进行硬编码,等等。我只想要每个月注册的数字的摘要,所以如果这样做可以更快,那就更好了 我有类似的东西 User-+-From-------+-To----------------- A + 11JAN2011 + 15MAR2011 A + 16JUN2011 + 17AUG2011 B + 10FEB2011 + 12FEB2011 C + 01AU
User-+-From-------+-To-----------------
A + 11JAN2011 + 15MAR2011
A + 16JUN2011 + 17AUG2011
B + 10FEB2011 + 12FEB2011
C + 01AUG2011 + 05AUG2011
Month---+-Registrations
JAN2011 + 1 (A)
FEB2011 + 2 (AB)
MAR2011 + 1 (A)
APR2011 + 0
MAY2011 + 0
JUN2011 + 1 (A)
JUL2011 + 1 (A)
AUG2011 + 2 (AC)
我想要像这样的东西
User-+-From-------+-To-----------------
A + 11JAN2011 + 15MAR2011
A + 16JUN2011 + 17AUG2011
B + 10FEB2011 + 12FEB2011
C + 01AUG2011 + 05AUG2011
Month---+-Registrations
JAN2011 + 1 (A)
FEB2011 + 2 (AB)
MAR2011 + 1 (A)
APR2011 + 0
MAY2011 + 0
JUN2011 + 1 (A)
JUL2011 + 1 (A)
AUG2011 + 2 (AC)
注意,我不需要括号中的位;那只是想澄清我的观点
感谢您的帮助。一个简单的方法是构造一个中间数据集,然后进行PROC FREQ
data have;
informat from to DATE9.;
format from to DATE9.;
input user $ from to;
datalines;
A 11JAN2011 15MAR2011
A 16JUN2011 17AUG2011
B 10FEB2011 12FEB2011
C 01AUG2011 05AUG2011
;;;;
run;
data int;
set have;
_mths=intck('month',from,to,'d'); *number of months after the current one (0=current one). 'd'=discrete=count 1st of month as new month;
do _i = 0 to _mths; *start with current month, iterate over months;
month = intnx('month',from,_i,'b');
output;
end;
format month MONYY7.;
run;
proc freq data=int;
tables month/out=want(keep=month count rename=count=registrations);
run;
您可以通过在do循环中执行此操作来消除_mth步骤。太好了。谁知道会这么简单。非常感谢。