2015年11月2日月曜日

CLASSステートメントは分割して書ける


CLASSステートメントが使えるプロシジャ全てに対応している機能か不明(使えてもリファレンスに詳細が記載されていないものがある)なので、
今回は、リファレンスにも詳細記載しているMEANSプロシジャで解説していきます。


サンプルデータ

* Sample data ;
data DT1;
input A B VAL;
cards;
1 1 10
2 1 15
. 1 12
. . 13
;
 A  
 B  
 VAL  
  1    1  10
  2    1  15
  .    1  12
  .    .  13



CLASSステートメントの分割


以下よくあるプログラムですが、、、
proc means data=DT1;
  var VAL;
  class A B;
run;


CLASSステートメントを分割して書くことが出来る。
proc means data=DT1;
  var VAL;
  class A;
  class B;
run;


分割して書けるから何なの?って感じですが、
以下のように「CLASS変数の一部にオプションを適用させたいとき」に便利です。

proc means data=DT1;
  var VAL;
  class A / descending;
  class B;
run;

上の例では、変数Aのみ降順に出力するよう descendingオプションを設定しています 。



ちょっとした注意点

以下では変数Aだけmissingオプションをつけて、欠損値のものも分類として出力させています。

proc means data=DT1;
  var VAL;
  class A / missing;
  class B;
run;



ただし、たとえAが欠損値でも、missingオプションを適用させていないB も欠損値であれば、分類として出力されません。(サンプルデータ4行目)

 A  
 B  
 VAL  
  1    1  10
  2    1  15
  .    1  12
  .    .  13


その他

TABULATEプロシジャはCLASSステートメントを使いまくるので、今回の方法が役に立つと思います。


0 件のコメント:

コメントを投稿