csvファイルなら、dataステップで infile, inputを使って自前で取り込み処理をした方が、自分で属性を決定できるので無駄な変換が減る気もしますが。(変数の数にもよります)
SASでは0を1960-1-1として処理しています。(SAS日付値)
20220423は5万年くらい先?となるため、表示できずアスタリスク表示になります。
ご希望の処理をするためには、あえて一度文字列にして、SAS日付値として再構成する必要があります。
一番簡単なのはputで文字列に変換した後、ANYDTDTE インフォーマットでSAS日付値に変換する方法だと思います。
data _null_;
original=20220423;
dtc=put(original,best8.);/* 文字列に変換 */
dtn=input(dtc,ANYDTDTE8.);/* SAS日付値に変換 */
put dtn=yymmdd10.;/*確認のため出力*/
format dtn yymmdd10.;/* as you like */
run;
以下のように年月日を分解してmdy関数で変換するという方法もありますが。
data _null_;
original=20220423;
dtc=put(original,best8.);
dtn=mdy(input(substr(dtc,5,2),2.)
,input(substr(dtc,7,2),2.)
,input(substr(dtc,1,4),4.));
put dtn=yymmdd10.;
run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!