SASで複数の変数の欠損の数を数えるにはcmiss関数があります。cmiss関数は便利な関数で、1obsの中で文字だろうが数字だろうが指定した変数の中の欠損の数を数えてくれます。非欠損の変数の数を数える際は、数字変数ならn関数というこれまた便利な関数があります。
一方文字変数の中で非欠損の数を数えたいときはいつも難儀していました。良い感じの関数が多分sasにはないです。あったらすみません。しょうがないので配列で数えたいうのが今回の記事です。文字変数と銘打っていますが欠測かどうかをmissing関数で調べているので、多分文字でも数字でも非欠損の数を出せると思います。文字でしか試してないのでerrorになるかもしれませんが。
対象の変数を指定している配列の部分をマクロ変数化すればいい感じのマクロになるんじゃないでしょうか?可変なのがその部分だけ、強いて言えばそこと結果を格納する変数名の部分だけなので。