2018年6月14日木曜日

PROC FORMAT入門8 : CNTLOUT=オプション




CNTLOUT=オプション」で、FORMATカタログの中身をデータセットに出力することが出来ます。




構文

PROC FORMAT  LIBRARY=ライブラリ.カタログ名  CNTLOUT=出力先データセット ;
       SELECT  出力するフォーマットを列挙;
RUN;


  • LIBRARY=ライブラリ名」というようにカタログ名を省略した場合、ライブラリ内の「FORMATS」という名前のカタログがデフォルトで選択されます。
  • SELECTステートメントを省略するとカタログ内の全フォーマットが選択されます。






proc format;
   value TEST1_
       1 = "MALE"
       2 = "FEMALE"
   ;
   value $TEST2_
       "Y" = "YES"
       "N" = "NO"
   ;
run;

proc format lib=WORK cntlout=OUT1;
run;



フォーマット「TEST1_」と「TEST2_」が、CNTLOUT=オプションで作成されたデータセットにそれっぽい感じで格納されていることが分かるかと思います。



出来たデータセットの各変数について、以下にざっくり説明しておきます。



CNTLOUT = データセットの各変数の説明

 変数名 型 内容 
 FMTNAME  文字   フォーマット名
 START 文字 開始値
 END 文字 終了値
 LABEL 文字 出力値
 MIN 数値 MIN=オプション値 
 MAX 数値 MAX=オプション値
 DEFAULT
 数値 DEFAULT=オプション値 
 LENGTH  数値 LENGTH=オプション値 。。とリファレンスに書いてありますが、
 そんなオプション存在しないと思われるので詳細不明
 FUZZ   数値 FUZZ=オプション値
 PREFIX   文字 PICTUREフォーマットのPREFIX=オプション値 
 MULT 
 数値
 PICTUREフォーマットのMULTIPLIER=オプション値
 FILL  文字 PICTUREフォーマットのFILL=オプション値
 NOEDIT   数値 PICTUREフォーマットのNOEDITオプションが有効かどうか
 (1=有効 0=無効)
 TYPE 

 文字

 フォーマットの種類
  N = 数値フォーマット
  C = 文字フォーマット
  I = 数値インフォーマット
  J = 文字インフォーマット
  P = PICTUREフォーマット

 SEXCL

 文字

 開始値の取扱い
 ("Y"=開始値を含めない "N"=開始値を含める)

 EEXCL  

 文字

 終了値の取扱い
 ("Y"=終了値を含めない "N"=終了値を含める)

 HLO

 文字

 開始値・終了値の追加情報 (すごく重要な変数)

  O = OTHER

  L = LOW
  H = HIGH
  R = PICTUREフォーマットのROUNDオプション
  ...等。詳細はリファレンスを参照 


 (組み合わせて使用します。例:Low-High…LH)


 DECSEP  文字 PICTUREフォーマットのDECSEP=オプション値
 DIG3SEP 文字 PICTUREフォーマットのDIG3SEP=オプション値
 DATATYPE  文字 PICTUREフォーマットのDATATYPE=オプション値
 LANGUAGE 文字 PICTUREフォーマットのLAUNGUAGE=オプション値






次に色々なフォーマットをCNTLOUT=でデータセットに出力して、どんな感じのデータが出来るか見てみます。

例2

proc format;
   value TEST1_
      1 = "MALE"
      2 = "FEMALE"
   ;
   value $TEST2_
      "Y" = "YES"
      "N" = "NO"
   ;
   value TEST3_
      1 - 3 = "1~3"
      other = "その他"
   ;
   invalue TEST4_
      "MALE"     = 1
      "FEMALE" = 2
   ;
   invalue $TEST5_
      "Y"    = "YES"
      "N"    = "NO"
   ;
   picture TEST6_ (default=3)
     low -< 0 = '00' (prefix="-")
     0 - high = '00'
   ;
   picture TEST7_ (round)
      low - high = '009.00%'
   ;
   picture TEST8_ (default=10)
      low - high = '%Y_%0m_%0d' (datatype=datetime)
   ;
run;


proc format lib=WORK cntlout=OUT1;
run;


結果は以下。画像をクリックすると拡大されます。



0 件のコメント:

コメントを投稿