填写日期范围内的月份和年份?

时间:2013-03-21 20:10:15

标签: sas time-series

我是SAS新手,想知道如何最有效地列出开始日期和结束日期之间的月份和年份,以及开始日期和结束日期本身。我已经了解了INTCK和INTNX函数,时间序列数据的EXPAND函数,甚至CALENDAR FILL,但我不确定如何将它们用于此特定目的。由于拖放自动填充功能,使用Excel中的小数据集可以轻松完成此任务,但由于数据集的大小,我需要在SAS中找到一种方法。任何建议将不胜感激。谢谢!

数据集位于现在这样组织的大型文本文件中:

ID          Start               End
1000        08/01/2012          12/31/2012
1001        07/01/2010          05/31/2011
1002        04/01/1990          10/31/1991

但输出最终应该是这样的:

ID      MonthYear
1000    08/12
1000    09/12
1000    10/12
1000    11/12
1000    12/12
1001    07/10
1001    08/10
1001    09/10
1001    10/10
1001    11/10
1001    12/10
1001    01/11
1001    02/11
1001    03/11
1001    04/11
1001    05/11
1002    04/90
1002    05/90
1002    06/90
1002    07/90
1002    08/90
1002    09/90
1002    10/90
1002    11/90
1002    12/90
1002    01/91
1002    02/91
1002    03/91
1002    04/91
1002    05/91
1002    06/91
1002    07/91
1002    08/91
1002    09/91
1002    10/91

2 个答案:

答案 0 :(得分:5)

data want2;
  set have;
  do i = 0 to intck('month',start,end);
      monthyear=intnx('month',start,i,'b');
      output;
      end;
   format monthyear monyy.;
   keep id monthyear;
   run;

答案 1 :(得分:1)

这样就可以了。 PROC EXPAND可能更有效率,但我认为它需要一些期望的观察而不是开始/结束组合(尽管你可以得到它,我想)。

data have;
informat start end MMDDYY10.;
input ID          Start               End;
datalines;
1000        08/01/2012          12/31/2012
1001        07/01/2010          05/31/2011
1002        04/01/1990          10/31/1991
;;;;
run;

data want;
set have;
format monthyear MMYYS5.;    *formats the numeric monthyear variable with your desired format;
monthyear=start;             *start with the initial observation;
output;                      *output it;
do _t = 1 by 1 until (month(monthyear)=month(end)); *iterate until end;
  monthyear = intnx('month',monthyear,1,'b');       *go to the next start of month;
  output;                                           *output it;
end;
run;