日付変換

スポンサーリンク

日付変換です。ある程度パターン化されているのでメモしておきます。

スポンサーリンク

yyyy-mm-dd → yymmdd系

YYMMDDxw出力形式を利用します。


x:区切り文字を指定。

B空白区切り。
Cコロン区切り。
Dハイフン区切り。
N区切り文字なし。
Pピリオド区切り
Sスラッシュ区切り。

w:出力幅を指定。

デフォルト8
範囲2-10
操作xがNのとき、wは2〜8となります。
data test_A01;
  DTC = "2021-03-04"; output;
  DTC = "2021-03-28"; output;
run;

data test_A02;
  set test_A01;
  DT  = input(DTC, e8601da.);
  
  yymmdd_10  = put(DT, yymmdd10.);
  yymmdd_p10 = put(DT, yymmddp10.);
  yymmdd_s10 = put(DT, yymmdds10.);
  yymmdd_n8  = put(DT, yymmddn8.);
run;

proc print data = test_A02;
run;

yyyy-mm-dd → ddmmmyy系

DATEw出力形式を利用します。


w:出力幅を指定。

デフォルト7
範囲5-11
data test_B01;
  DTC = "2021-03-04"; output;
  DTC = "2021-03-28"; output;
run;

data test_B02;
  set test_B01;
  DT  = input(DTC, e8601da.);
  
  ddmmmyy_05 = put(DT, date5.);
  ddmmmyy_07 = put(DT, date7.);
  ddmmmyy_09 = put(DT, date9.);
  ddmmmyy_11 = put(DT, date11.);
run;

proc print data = test_B02;
run;

yyyy-mm-dd → ddmmyy系

DDMMYYxw出力形式を利用します。


x:区切り文字を指定。

B空白区切り。
Cコロン区切り。
Dハイフン区切り。
N区切り文字なし。
Pピリオド区切り
Sスラッシュ区切り。

w:出力幅を指定。

デフォルト8
範囲2-10
操作xがNのとき、wは2〜8となります。
data test_C01;
  DTC = "2021-03-04"; output;
  DTC = "2021-03-28"; output;
run;

data test_C02;
  set test_C01;
  DT  = input(DTC, e8601da.);
  
  ddmmyy_d8  = put(DT, ddmmyyd8.);
  ddmmyy_p10 = put(DT, ddmmyyp10.);
  ddmmyy_n6  = put(DT, ddmmyyn6.);
  ddmmyy_n8  = put(DT, ddmmyyn8.);
run;

proc print data = test_C02;
run;

yyyy-mm-dd → mmddyy系

MMDDYYx出力形式を利用します。


x:区切り文字を指定。

B空白区切り。
Cコロン区切り。
Dハイフン区切り。
N区切り文字なし。
Pピリオド区切り
Sスラッシュ区切り。

w:出力幅を指定。

デフォルト8
範囲2-10
操作xがNのとき、wは2〜8となります。
data test_D01;
  DTC = "2021-03-04"; output;
  DTC = "2021-03-28"; output;
run;

data test_D02;
  set test_D01;
  DT  = input(DTC, e8601da.);
  
  mmddyy_p10 = put(DT, mmddyyp10.);
  mmddyy_n7  = put(DT, mmddyyn7.);
  mmddyy_n8  = put(DT, mmddyyn8.);
run;

proc print data = test_D02;
run;

ddmmmyyyy:hh24:mi:ss.ff3 → yyyy-mm-dd

元データ

data raw;
  informat raw_date_c $22.;
  
  input raw_date_c $;
cards;
31OCT2021:12:34:56.000
01NOV2021:01:23:45.000
10DEC2021:11:22:33.000
;
run;

変換

data test1;
  set raw;
  length
    datetime_i 8
    date_c     $10
  ;

  datetime_i = input( raw_date_c, datetime22.3 );
  date_c     = put( datepart(datetime_i), yymmdd10. );
run;

ddmmmyyyy:hh24:mi:ss.ff3 → hh24:mi:ss

元データは上のデータセット(raw)を再利用。

data test2;
  set raw;
  length
    datetime_i 8
    time_c1    $5
    time_c2    $8
    time_c3    $5
    time_c4    $8
  ;

  datetime_i = input( raw_date_c, datetime22.3 );
  
  time_c1 = put( timepart(datetime_i), time5. );
  time_c2 = put( timepart(datetime_i), time8. );

  /* ゼロ埋めして表示 */
  time_c3 = put( timepart(datetime_i), tod5. );
  time_c4 = put( timepart(datetime_i), tod8. );
run;

dd mmm yyyy → yyyy-mm-dd

上で説明したDATEw出力形式を利用することでできます。

data test_H01;
  informat date_c $11.;
  input date_c & $;
cards;
06 NOV 2021
7 NOV 2021
10 DEC 2021
;
run;

赤字にした&はinputステートメントで変数にスペース1文字を入れたいときに記述します。


data test_H02;
  set test_H01;
  
  aaa = input(date_c, date11.);
  bbb = put(aaa, yymmdd10.);
run;

コメント