2018年2月6日火曜日

PROC FORMAT入門3 : INVALUEステートメント




今回は「INVALUEステートメント」について。


データを読み込む際に「男→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_.;
cards;
MALE Y
FEMALE N
;
 SEX  YN 
  1  YES 
  2  NO


上の例では、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;
run;

SEX  YN 
 MALE  Y
 FEMALE  N


* 変数値をインフォーマットで変換する ;
data DT3;
   set DT1;
   length SEX2 8. YN2 $3.;
   SEX2 = input( SEX, TEST1_.);
   YN2  = input( YN , $TEST2_.);
run;


SEX 
 YN 
 SEX2 
 YN2 
 MALE
 Y 
  1
 YES 
 FEMALE  
 N
 
 NO



上の例では「INPUT関数」を使って以下を行なっています。
  • 変数 SEX の値を インフォーマット「TEST1_」を使って変換し、変数 SEX2 に格納。
  • 変数 YN の値を インフォーマット「TEST2_」を使って変換し、変数 YN2 に格納。



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



ポイント
  • 文字変数に対して、インフォーマットを使って数値または文字に変換します。
  • インフォーマット名の後ろにドット「.」を入れる必要があります。





注意事項


PROC FORMAT入門 : 記事一覧


0 件のコメント:

コメントを投稿