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でいいから、列持たせといてよ!こっちはコードで変数指定してるのに、無かったら、こけちゃうやん!って感じです。
まあ、そこだけ注意してコードを書いてください。