2018年6月29日金曜日

【小ネタ】データセットオプション「DROP=」「KEEP=」「RENAME=」の後に変数を指定しなくてもERRORにならない。




以下のように、データセットオプションの「drop=」「keep=」「rename=()」に変数を指定しなくても、ERRORになりません。

data out1;
   set sashelp.class ( drop= keep= rename=() );
run;



変数の指定がないので、これらのデータセットオプションは何もしません。




私はよく以下のような使い方をしています。
%macro test( _drop=, _keep=, _rename= );

    data out1;
      set sashelp.class ( drop=&_drop  keep=&_keep  rename=(&_rename) );
    run;

%mend;




マクロ実行時にdropしたい変数、keepしたい変数、renameしたい変数があれば、それらを指定できるようにし、指定がない場合は何もしない、という分岐を作る事ができます。



たとえば以下を実行すると、drop=, keep=, rename=をしません。

%test( )



以下実行すると、ageをkeepします。

%test( _keep=age )




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 

 数値

 MULTIPLIER=オプション値
 (PICTUREフォーマットの場合、指定してなくても勝手に入る)
 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 =「round=オプション」が有効  ...等 
 (組み合わせて使用する 例:Low-High…LH)

 DECSEP  文字 DECSEP=オプション値
 DIG3SEP 文字 DIG3SEP=オプション値
 DATATYPE  文字 PICTUREフォーマットのDATETYPE=オプション値
 LANGUAGE 文字 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;


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




PROC FORMAT入門 : 記事一覧


2018年6月7日木曜日

特定のシステムオプションをSAS起動時の設定に戻す【GETOPTION関数の使用例】





この前、以下GETOPTION関数の記事を書きましたが、今回は使用例を紹介します。
【GETOPTION関数】システムオプションの設定値を取得したりする。



例えば、PAGESIZEを200に設定したとします。

  options pagesize=200;




後から、このPAGESIZEをSAS起動時の設定に戻したい場合、以下のように書くだけでOK。

  options %sysfunc( getoption(pagesize,startupvalue,keyword) );


%SYSFUNCってなんだって人は以下も参照ください。
データステップ外で関数を使えるようにする「%SYSFUNC」その1



一応ちゃんと設定がSAS起動時の状態に戻ったか確認してみましょう。

  %put NOTE: OPTIONS %sysfunc( getoption(pagesize,keyword) ) に設定されています;

ログ
 NOTE: OPTIONS PAGESIZE=60 に設定されています

はい、私の環境だと PAGESIZE=60 なんで戻ってますね。



2018年6月2日土曜日

【GETOPTION関数】システムオプションの設定値を取得したりする。




GETOPTION関数でシステムオプションの設定値を取得できます。
試しにPAGESIZEオプションの設定値を取得してみます。



オプションの設定値を取得する例

options pagesize=200;

data test;
   length op $20.;
   op = getoption("pagesize");
run;

  op  
  200 

現在のPAGESIZEの設定値「200」を取得できました。
そして、この関数はこれだけじゃないですよ!オプションの取得方法も細かく指定できます。




「オプション名=設定値」の形式で取得する。

  op = getoption("pagesize","keyword");

  op  
  PAGESIZE=200 

PAGESIZEを設定する時は以下の赤文字部分の書式で書きますが、この部分が取得できるというわけです。

options pagesize=200;





SAS起動時の設定値を取得する。

  op = getoption("pagesize","startupvalue");

  op  
  60 





オプションの取得方法を複数指定する。

  op = getoption("pagesize","startupvalue","keyword");

  op  
  PAGESIZE=60 

SAS起動時の設定値をOPTIONSステートメントの書式で取得しています。



一番使えそうなのはこの辺ですかね、他にも色々指定方法があるんで、詳細はマニュアルをご覧くださいね。