2017年3月21日火曜日

欠損値の分類も集計に含めるMISSINGオプションと落とし穴





特に目新しい話しではないです。
通常、集計用のプロシジャで分類変数が欠損値の場合、そのオブザベーションは集計から除かれます。



サンプルデータ

data DT1;
input A B C;
cards;
1 1 10
. 1 10
2 1 10
. 1 10
;


変数Aには欠損値が含まれてます。



分類に欠損値が含まれている場合の集計結果

proc freq data=DT1;
   tables A * B;
run;









変数Aの欠損値2オブザベーションが集計から除かれています。
欠損値も含め集計したい場合、missingオプションをつけます。

proc freq data=DT1;
   tables A * B / missing;
run;





同様に proc means や proc summary でもclass変数が欠損値のオブザベーションは集計から除かれます。
missingオプションをつけるとclass変数が欠損値のものも含め集計されます。

proc means data=DT1;
   class A;
   var C;
run;

 ↓

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


proc tabulateも同様。

proc tabulate data=DT1;
   class A ;
   table A;
run;

 ↓

proc tabulate data=DT1;
   class A / missing;
   table A;
run;




落とし穴


かなり他力本願な感じですが、既にSASYAMAさんが記事にされていて、そちらをご覧ください。
means summaryプロシジャのclassステートメント指定変数の欠損値には気を付けてって話

classステートメントに変数を複数指定する場合は落とし穴に注意という話です。
class変数のいずれかに欠損値が含まれている場合、そのオブザベーションが全ての集計から除かれてしまいます。


以前紹介した以下の記事でも、class変数に欠損値が含まれている場合はmissingオプションを指定する必要があります。
頻度集計で存在しない水準値を0件として出したい【PROC MEANS編】
頻度集計で存在しない水準値を0件として出したい【PROC TABULATE編】


0 件のコメント:

コメントを投稿