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; format X mydatetm10.; X = '14mar2018:21:5:14'dt; run;
|
「datatype=datetime」としているので、日時値の変数に対するフォーマットを作成しています。
書式を定義する部分(青字箇所)に、やたら「%」が書かれてますね。
この「%なんちゃら」の部分を「ディレクティブ」と呼びます。
このディレクティブの組み合わせによって書式を定義しています。
以下、個人的に利用頻度の高いディレクティブを一覧にしました。ディレクティブ | 設定内容 | 対応する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 | |
%I | 時(12時間表記)。 %0Iとすると時間が1桁の時に先頭に0が埋められる | time, datetime | %I←大文字のアイです |
%M | 分。 %0Mとすると分が1桁の時に先頭に0が埋められる | time, datetime | |
%p | 午前(AM) or 午後(PM) | time, datetime | SASの言語設定によって結果が変わる (記事下方の注意事項を参照) |
%S | 秒。 %0Sとすると秒が1桁の時に先頭に0が埋められる | time, datetime |
例えば、書式を「%Y年%0m月%0d日」と定義したフォーマットを日付値に割り当てた場合、「2018年03月14日」みたいな感じで表示されます。
・ディレクティブには「%y」と「%Y」のように小文字・大文字の区別があるので注意
・他にも曜日や月名、週数などを設定するディレクティブもあります。あわせてマニュアルもご覧ください。
注意①
PROC FORMAT入門の記事で何回も言ってる気がしますが、「DEFAULT=オプション」をつけないと文字切れしちゃうケースがあるのでご注意を!
注意②
以下をご覧ください。
* フォーマット作成 ;
proc format;
picture mytime (default=10)
low - high = '%p%0I:%0M' (datatype=time)
;
run;
* フォーマットを変数に割り当てる ;
data TEST;
format X mytime10.;
X = '21:05't;
run;
結果
SASの環境が「日本語」の場合
SASの環境が「英語」の場合
|
ディレクティブ「%p」はSASの言語設定によって結果が変わります。
日本語設定の場合は「午前 or 午後」で表示され、英語設定の場合は「AM or PM」で表示されます。
英語設定にあわせたい場合は、以下のように「LANGUAGE=ENGLISH」と指定します。
* フォーマット作成 ;
proc format;
picture mytime (default=10)
low - high = '%p%0I:%0M' (datatype=time language=english)
;
run;
|
ちなみに、LANGUAGE=オプションは現状一部の言語にしか対応してません。
(日本語とか中国語とかには設定できない。なんでだ・・・)
2. 範囲の指定
3. INVALUEステートメント
4. PICTUREステートメント1
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
3. INVALUEステートメント
4. PICTUREステートメント1
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
0 件のコメント:
コメントを投稿