複雑に入り組んだFORMATプロシジャに鋭いメスを入れ、謎や疑問を徹底的に究明したいと思います。
FORMATプロシジャはザックリいうと、
「1→男、2→女」 や 「Y→YES、N→NO」
のような読み替え・変換を行う事が出来るプロシジャです。
今回はもっとも基本的な「VALUEステートメント」から解説をしていきます。
ではまず読み替えを行うフォーマットの定義から。
proc format;
value TEST1_
1 = "MALE"
2 = "FEMALE"
;
value $TEST2_
"Y" = "YES"
"N" = "NO"
;
run;
|
上の例では 「PROC FORMAT」を使って、以下を定義しています。
・「TEST1_」というフォーマットを定義し、「1→MALE、2→FEMALE」 という読み替えを定義
・「TEST2_」というフォーマットを定義し、「Y→YES、N→NO」 という読み替えを定義
構文
PROC FORMAT;
VALUE フォーマット名
値 = 割り当てる文字
値 = 割り当てる文字
・・・
;
RUN;
|
ポイント
・フォーマット名の最後は数字じゃダメ(例えば「TEST1」など)
・「"Y"→"YES"」のような文字から文字への読み替えを行うフォーマットは、フォーマット名の先頭に「$」をつける(例えば「$TEST」など)
では、先程つくったフォーマットを使ってみましょう。
* Sample data ;
data DT1;
SEX=1; YN="Y"; output;
SEX=2; YN="N"; output;
* 変数にフォーマットを割り当てる ;
data DT2;
set DT1;
format SEX TEST1_. YN TEST2_.;
run;
|
上の青字部分では 「FORMATステートメント」 を使って以下を行なっています。
・変数SEX に フォーマット「TEST1_」を割り当て。
・変数YN に フォーマット「TEST2_」を割り当て。
結果を見ると分かりますが、SEX と YN がそれぞれ対応するフォーマット値に読み替えられていますね。
構文
FORMAT 変数名 割り当てるフォーマット名. ;
|
ポイント
・割り当てるフォーマット名の後ろにドット「.」を入れる必要があります。
・あくまでも変数にフォーマットを割り当てているだけです。
(例えば上の例でSEXの値は「MALE」「FEMALE」に置き換わったように見えますが、それは見た目だけで、内部では元の値「1」「2」のままです。)
* Sample data ;
data DT1;
SEX=1; YN="Y"; output;
SEX=2; YN="N"; output;
set DT1; length SEX2 YN2 $20.; SEX2 = put( SEX, TEST1_.); YN2 = put( YN , $TEST2_.); run;
|
上の青字部分では 「PUT関数」 を使って以下を行なっています。
・変数SEX の値を フォーマット「TEST1_」を使って変換し、結果を変数SEX2 に格納。
・変数YN の値を フォーマット「TEST2_」を使って変換し、結果を変数YN2 に格納。
構文
新規変数名 = PUT( 変数名 , フォーマット名. );
|
ポイント
・フォーマット名の後ろにドット「.」を入れる必要があります。
・先程の例では見た目だけフォーマット値にしていましたが、今回は値そのものをフォーマット値に変換しています。
1. VALUEステートメント
2. 範囲の指定
3. INVALUEステートメント
4. PICTUREステートメント1
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
8. CNTLOUT=オプション
9. CNTLIN=オプション
3. INVALUEステートメント
4. PICTUREステートメント1
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
8. CNTLOUT=オプション
9. CNTLIN=オプション
0 件のコメント:
コメントを投稿