DATDIF関数・YRDIF関数について

[OS] ALL
[リリース] 8.2
[キーワード] Base, DATA, FUNCTION, DATDIF, YRDIF

[質問]

DATDIF関数およびYRDIF関数の使い方を教えてください。

[回答]

DATDIF関数は開始日付から終了日付までの日数を計算するための関数です。

日数= DATDIF(開始SAS日付値,終了SAS日付値,表示形式) ;

YRDIF関数は開始日付から終了日付までの年数を計算するための関数です。

年数= YRDIF(開始SAS日付値,終了SAS日付値,表示形式) ;

両関数とも3番目の引数「表示形式」には、年・月の扱いを変更するための設定値を指定します。

ACT/ACT 年・月とも実際の日数で計算します
30/360 1月を30日、1年を360日で計算します
ACT/360 1月を実際の日数、1年を360日で計算します
ACT/365 1月を実際の日数、1年を365日で計算します

必ず、

  • 月は「30」、「ACT」
  • 年は「360」、「365」、「ACT」
のいずれかの組み合わせで指定する必要があります。

プログラム例:DATDIF関数の処理

DATA _null_;
  sdate   = '16oct78'd;
  edate   = '16feb96'd;
  actual  = DATDIF(sdate, edate, 'act/act');
  days360 = DATDIF(sdate, edate, '30/360');
  PUT actual= ; 
/* 実際の日数で計算*/
  PUT days360= ;    /* 1月を30日、1年を360日で計算*/
RUN ;

上記の処理結果

  actual=6332
  days360=6240

プログラム例:YRDIF関数の処理

DATA _NULL_;
  sdate = '16oct1998'd;
  edate = '16feb2003'd;
              /* 1月を30日、1年を360日で計算*/
  y30360 = YRDIF(sdate, edate, '30/360'); 
                           /* 実際の日数で計算*/
  yactact = YRDIF(sdate, edate, 'ACT/ACT');
                           /* 1年を360日で計算*/
  yact360 = YRDIF(sdate, edate, 'ACT/360');
                           /* 1年を365日で計算*/
  yact365 = YRDIF(sdate, edate, 'ACT/365');
  PUT y30360=
      yactact=
      yact360=
      yact365= ;
RUN ;

上記の処理結果

y30360 = 4.3333333333
yactact = 4.3369863014
yact360 = 4.4
yact365 = 4.3397260274
※YRDIF関数については、開始日付もしくは終了日付が閏年であり、かつ 表示形式が「ACT/ACT」の場合、期待した戻り値にならないという問題があります。詳細は下記URLの情報をご参照ください。
http://support.sas.com/kb/3/036.html