日付変換です。ある程度パターン化されているのでメモしておきます。
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;
コメント