データを読み込む際に「男→1、女→2」「Y→YES、N→NO」みたいな変換を行うための「インフォーマット」と呼ばれるものを定義するステートメントです。
FORMATプロシジャ入門の第1回の記事で解説したVALUEステートメントと機能が似てるので、区別がついていない方も多いです。
実際、例を見た方が分かり易いです。まずは変換を行うインフォーマットの定義から。
proc format;
invalue TEST1_
"MALE" = 1
"FEMALE" = 2
;
invalue $TEST2_ "Y" = "YES" "N" = "NO" ;
run;
|
- 「TEST1_」というインフォーマットを定義し、「"MALE"→1、"FEMALE"→2」 という変換を定義
- 「TEST2_」というインフォーマットを定義し、「"Y"→"YES"、"N"→"NO"」 という変換を定義
構文
PROC FORMAT;
INVALUE インフォーマット名
値 = 変換後の値
値 = 変換後の値
・・・
;
RUN;
|
ポイント
- インフォーマット名の最後は数字じゃダメ(例えば「TEST1」など)
- 「"Y"→"YES"」のような文字から文字への変換を行うインフォーマットは、インフォーマット名の先頭に「$」をつける(例えば「$TEST」など)
では、先程つくったインフォーマットを使ってみましょう。
data DT1;
length SEX 8. YN $3.;
input SEX YN;
informat SEX TEST1_. YN $TEST2_.;
MALE Y FEMALE N ;
|
上の例では、CARDSで読み込むデータに対して「INFORMATステートメント」で以下を行なっています。
- インフォーマット「TEST1_」を使い「"MALE"→1、"FEMALE"→2」に変換した値を変数 SEX に格納
- インフォーマット「TEST2_」を使い「"Y"→"YES"、"N"→"NO"」に変換した値を変数 YN に格納
構文
INFORMAT 変数名 インフォーマット名. ;
|
ポイント
- テキストファイル や CARDS で読み込むデータに対して、インフォーマット変換した値を変数に格納する。
- インフォーマット名の後ろにドット「.」を入れる必要があります。
* Sample data ;
data DT1;
length SEX $6. YN $1.;
SEX="MALE"; YN="Y"; output;
SEX="FEMALE"; YN="N"; output;
set DT1; length SEX2 8. YN2 $3.; SEX2 = input( SEX, TEST1_.); YN2 = input( YN , $TEST2_.); run;
|
上の例では「INPUT関数」を使って以下を行なっています。
- 変数 SEX の値を インフォーマット「TEST1_」を使って変換し、変数 SEX2 に格納。
- 変数 YN の値を インフォーマット「TEST2_」を使って変換し、変数 YN2 に格納。
構文
新規変数名 = INPUT( 変数名 , インフォーマット名. );
|
ポイント
- 文字変数に対して、インフォーマットを使って数値または文字に変換します。
- インフォーマット名の後ろにドット「.」を入れる必要があります。
0 件のコメント:
コメントを投稿