2018年1月10日水曜日

PROC FORMAT入門1 : VALUEステートメント




複雑に入り組んだ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;
run;
SEX  YN 
 1 Y
 2 N


* 変数にフォーマットを割り当てる ;
data DT2;
   set DT1;
   format SEX TEST1_. YN TEST2_.;
run;
SEX  YN 
 MALE YES 
 FEMALE  NO



上の青字部分では 「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;
run;
SEX  YN 
 1 Y
 2 N


* フォーマット変換する ;
data DT3;
   set DT1;
   length SEX2 YN2 $20.;
   SEX2 = put( SEX, TEST1_.);
   YN2  = put( YN , $TEST2_.);
run;
SEX 
 YN 
SEX2
 YN2 
 1
 Y 
 MALE
 YES 
 2 
 N
 FEMALE 
 NO



上の青字部分では 「PUT関数」 を使って以下を行なっています。

・変数SEX の値を フォーマット「TEST1_」を使って変換し、結果を変数SEX2 に格納。
・変数YN の値を フォーマット「TEST2_」を使って変換し、結果を変数YN2 に格納。



構文
 新規変数名 = PUT(  変数名 ,  フォーマット名.  );


ポイント
フォーマット名の後ろにドット「.」を入れる必要があります。
・先程の例では見た目だけフォーマット値にしていましたが、今回は値そのものをフォーマット値に変換しています。




注意事項




PROC FORMAT入門 : 記事一覧

1. VALUEステートメント

0 件のコメント:

コメントを投稿