BookmarkSubscribeRSS Feed
匿名
Fluorite | Level 6
「20220423」のような数値を「2022-04-23」のようにハイフン区切りで出力したいです。yymmdd10.を使用しましたが、アスタリスクで出力されてしまいます。少し急ぎですので、よろしくお願いいたします。
5 REPLIES 5
匿名
Fluorite | Level 6
背景
・proc importを使用してcsvファイルを読み込み
・mergeの中で上記の処理を行いたい
japelin
Rhodochrosite | Level 12

csvファイルなら、dataステップで infile, inputを使って自前で取り込み処理をした方が、自分で属性を決定できるので無駄な変換が減る気もしますが。(変数の数にもよります)

匿名
Fluorite | Level 6
ご回答ありがとうございます!!
確かにdataステップのやり方ではうまくいきますね、今回はどうしてもimportでしたので、、
japelin
Rhodochrosite | Level 12

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;

 

匿名
Fluorite | Level 6
ANYDTDTE インフォーマットはじめましてでした!ご回答ありがとうございます!!うまく実行できました!

SAS Innovate 2025: Register Now

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!

Discussion stats
  • 5 replies
  • 1846 views
  • 4 likes
  • 2 in conversation