【SAS】SAS日付と8桁数値の変換

SAS日付と8桁数値の変換方法はいくつかあるみたいなので、覚え書き。

SAS日付→8桁数値

日付関数を使う
YEAR(SAS_DATE)*10000 + MONTH(SAS_DATE)*100 + DAY(SAS_DATE)
文字値に一度変換する
INPUT(NLDATE(SAS_DATE, '%Y%m%d'), best8.)
文字値に一度変換する(マクロバージョン)

マクロで使う場合は、%をエスケープしなければいけないので

%SYSFUNC(INPUTN(%SYSFUNC(NLDATE(SAS_DATE, %NRSTR(%Y%m%d))), best8.))

8桁数値→SAS日付

MDY関数を使う
MDY(input(substr(put(DATE, best8.), 5, 2), best2.), input(substr(put(DATE, best8.), 7, 2), best2.), input(substr(put(DATE, best8.), 1, 4), best4.))
文字値に一度変換する
input(put(DATE, best8.), yymmdd8.)