1

私は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
4

2 に答える 2

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;
于 2013-03-21T21:44:18.203 に答える
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;
于 2013-03-21T20:18:53.940 に答える