2018年12月1日土曜日

日時分の文字値から日付をSAS日付で取り出す

"2018-11-15T10:45"の様な形式の日付の文字変数を,日付部分だけSAS日付に変換する時ってあると思います.
今の例で言うと,"2018-11-15T10:45"文字値を2018-11-15のSAS日付の変数に変えると言うだけです.

以下にプログラムと実行ログを載せているので他に書くこと無いのですが,SAS9.3以下だとおかしくなることがあります.

もともとの文字変数側のlengthが短いと正しくSAS日付に変換できないことがあるようです.
SAS9.4だとこんなことは無く何も気にしなくて大丈夫です.


/*---------- プログラム ----------*/

data HOGE ;
    A = "2018-11-15T10:45" ; output ;
    A = "2018-11--T10:45" ; output ;
 
run ;

data _null_ ;
    set HOGE ;

    if count(A , "-") = 2 then B = input(A,is8601da.) ;
    else putlog A ;
   
    format B yymmdd10. ;
    putlog A B ;

run ;

/*---------- 実行log ----------*/

356
357  data HOGE ;
358      A = "2018-11-15T10:45" ; output ;
359      A = "2018-11--T10:45" ; output ;
360
361  run ;
NOTE: データセットWORK.HOGEは2オブザベーション、1変数です。
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.01 秒
      CPU時間            0.00 秒

362
363  data _null_ ;
364      set HOGE ;
365      if count(A , "-") = 2 then B = input(A,is8601da.) ;
366      else putlog A ;
367
368      format B yymmdd10. ;
369      putlog A B ;
370
371  run ;
2018-11-15T10:45 2018-11-15    /*1レコード目をputlog*/
2018-11--T10:45                          /*Aにハイフンが2個以上あるのでelse以下のputlog*/
2018-11--T10:45 .                        /*2レコード目をputlog*/
NOTE: データセットWORK.HOGEから2オブザベーションを読み込みました。
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.00 秒
      CPU時間            0.00 秒