質問 「2004/12/25」から「2005/01/25」、また「2004/12/02」から「2005/02/02」など、基準となる日付からnヵ月後の同日の日付を求めるにはどうしたらよいでしょうか。
回答 SAS日付を年月の単位で移動させる関数には、INTNX関数があります。 INTNX関数は、基準となる日付に対し、以下の構文で指定します。
1ヵ月後
INTNX('MONTH',基準日付,1);
2ヵ月後
INTNX('MONTH',基準日付,2);
ただしINTNX関数は、デフォルトではnヵ月後の月の初日を返します。 つまり、2004年11月26日を基準日付にした場合、以下のような値を返します。
1ヵ月後
2004年12月1日(に相当するSAS日付値)
2ヵ月後
2005年1月1日(に相当するSAS日付値)
したがって、nヵ月後の同日日付を求めるには少し工夫が必要になります。 以下にプログラム例と解説を記載しますので、参考にしてください。
/* サンプルデータ作成 */
DATA days;
INPUT hizuke YYMMDD10.;
CARDS;
2004/01/01
2000/02/29
2003/02/28
2004/12/02
2004/12/25
;
/* 1ヵ月後の日付計算 */
DATA temp;
SET days;
daydiff = DAY(hizuke)-1;
monthafter = INTNX('MONTH', hizuke, 1) + daydiff;
FORMAT hizuke YYMMDD10.
monthafter YYMMDD10.;
RUN;
上記のプログラムでは、与えられた基準日付 hizukeがその月の1日から何日後であるかを求め、daydiffに格納します。hizuke が2004年11月26日ならば、daydiffは25となります。
ここで、「1ヵ月後の日付 = 1ヵ月後の月初 + daydiff」と考えられますので、INTNX関数を使用して1ヵ月後の日付を求めています。 ただし上記のプログラムでは、うるう年でない年の1月29日の1ヶ月後の日付は、2月29日が存在しないために「3月1日」となりますのでご注意ください。
... View more