freqプロシジャのnlevelsオプション

データに含まれる変数ごとの水準数(度数じゃなくて、カテゴリ数・パターン数)を取得したい場合
freqプロシジャの、nlevelsが便利です。


例えば以下の様な適当なデータセットがあったとして

data Q1;
X=1;Y='A';output;
X=1;Y='B';output;
X=.;Y='A';output;
X=2;Y='D';output;
X=3;Y='C';output;
X=2;Y='E';output;
run;



ods output Nlevels=A1;
proc freq data=Q1 nlevels;
   tables _all_;
run;

とすると、アウトプットの方は






















こんな感じです。赤く括った箇所が、nlevelsオプションとつけたことで現れた部分です。
水準数と、その中で欠損水準・非欠損水準の数を出してくれます。

で、ods outputで、これをデータセット化すると





となります。

こっから、マクロ変数に突っ込みたい時なんかに便利ですが、
一つ要注意なのが、欠損水準が指定した全変数中一つもない場合、変数「NMissLevels」「NNonMisslevels」の変数そのものが出現しないという問題です。

要するに

ods output Nlevels=A2;
proc freq data=Q1 nlevels;
   where X^=.;
   tables _all_;
run;

とすると

データセットは






の2変数だけです。

プログラマーの気持ちとしては、こういう、データ依存で出力デザインが可変になるのは、ちょっと困りますよね。
欠損水準数とか、値0でいいから、列持たせといてよ!こっちはコードで変数指定してるのに、無かったら、こけちゃうやん!って感じです。

まあ、そこだけ注意してコードを書いてください。





0 件のコメント:

コメントを投稿