PICTUREステートメントで日付・時刻・日時値に書式を設定する「DATATYPE=オプション」の説明をしていきます。
PROC FORMAT;
PICTURE フォーマット名
値 = '書式の定義' (DATATYPE = データのタイプ)
値 = '書式の定義' (DATATYPE = データのタイプ)
・・・
;
RUN;
|
・フォーマット名の末尾は数字NG(例えば「TEST1」など)
・フォーマットを適用する変数が、日付(DATE)・時刻(TIME)・日時(DATETIME)のどれなのかを「DATATYPE=」に指定
・間違ったDATATYPEを指定しないように!
(例えば対象の変数が日付値なのに、DATATYPE=DATETIMEを指定するなど)
* フォーマット作成 ;
proc format; picture mydatetm (default=10) low - high = '%Y_%0m_%0d' (datatype=datetime) ; run; * フォーマット変換 ; data TEST; length X 8. Y $10.; X = '14mar2018:21:5:14'dt; Y = put(X,mydatetm.);
run;
|
「datatype=datetime」として、日時値の変数に対するフォーマットを作成しています。
書式を定義する部分(青字箇所)に、やたら「%」が書かれてますね。
この「%なんちゃら」の部分を「ディレクティブ」と呼びます。
ディレクティブの組み合わせによって書式を定義します。
※ オプションやディレクティブの組み合わせ、SASの環境・言語設定によって、動作しなかったり動きが変わるため要挙動確認!
ディレクティブ | 設定内容 | 対応するDATATYPE |
%y | 年(2桁) %0yとすると年が1桁の時に先頭に0が埋められる | date, datetime |
%Y | 年(4桁) | date, datetime |
%m | 月 %0mとすると月が1桁の時に先頭に0が埋められる | date, datetime |
%d | 日 %0dとすると日が1桁の時に先頭に0が埋められる | date, datetime |
%H | 時(24時間表記) %0Hとすると時間が1桁の時に先頭に0が埋められる | time, datetime |
%M | 分 %0Mとすると分が1桁の時に先頭に0が埋められる | time, datetime |
%S | 秒(秒の整数部分のみ対応) %0Sとすると秒が1桁の時に先頭に0が埋められる | time, datetime |
%% | 例えば「100%」と表示するには「100%%」と指定 | date, time, datetime |
例えば、書式を「%Y年%0m月%0d日」と定義したフォーマットを日付値に適用した場合、「2018年03月14日」みたいな感じで適用されます。
・ディレクティブには「%y」と「%Y」のように小文字・大文字の区別があるので注意
・他にも曜日や月名、週数などを設定するディレクティブもあります。あわせてマニュアルもご覧ください。
注意①
以下記事の最後らへんで解説している通り、フォーマット適用後の文字の長さを考慮して「DEFAULT=オプション」も併用しないと、文字切れするケースがある。
注意②
オプションやディレクティブの組み合わせ、SASの環境・言語設定など、様々な要素によって結果が変わります。
以下、SASの環境によって結果が変わる一例です。
ディレクティブ「%p」と「%I」は、以下の意味になります。
「 2018年03月14日」みたいに文字が右に詰められて左側に空白(半角スペース)が入る事があるのでそこんところもご留意下さい。
注意②
以下、SASの環境によって結果が変わる一例です。
* フォーマット作成 ;
proc format;
picture mytime (default=8)
low - high = '%p%I' (datatype=time)
;
run;
* フォーマット変換 ;
data TEST; length X 8. Y $10.;
X = '21:05't; Y = put(X,mytime.);
run;
結果
SASの環境が「日本語」の場合
SASの環境が「英語」の場合
|
ディレクティブ「%p」と「%I」は、以下の意味になります。
・%p: timeやdatetimeの時刻に対してAM/PMを出力
・%I(大文字のアイ): timeやdatetimeの時刻に対して「時(12時間表記)」を出力
上の例ではSASの環境によって結果が変わっています。
(日本語の場合は「午前 or 午後」、英語の場合は「AM or PM」が適用された)
(日本語の場合は「午前 or 午後」、英語の場合は「AM or PM」が適用された)
英語の設定にあわせたい場合は、以下のように「LANGUAGE=ENGLISH」と指定します。
(この方法でも環境とか他の要素で結果が変わるかも)
proc format;
picture mytime (default=8)
low - high = '%p%I' (datatype=time language=english)
;
run;
|
ちなみに、LANGUAGE=オプションは現状一部の言語にしか対応してません。
(日本語とか中国語とかには設定できない。なんでだ・・・)
注意③
proc format; picture mydatetm (default=10) . = '%Y_%0m_%0d' (datatype=datetime) ; run; data TEST; length X 8. Y $10.; X = .; Y = put(X,mydatetm.); run;
|
3. 範囲の指定
0 件のコメント:
コメントを投稿