頻度集計で存在しない水準値を0件として出したい【PROC SUMMARY編】の続き。
PROC TABULATEでも0件の水準を出すことができます。
今回使用するサンプルデータは前回と一緒ですが、あらためて以下に載せておきます。
*** サンプルデータ作成 ; data DT1; input NO$ YN SEX; cards; 001 1 2 002 1 2 ; YN…何かの有無(0=無、1=有) *** FORMAT作成 ; proc format; value _YN 0 = "無" 1 = "有" ; value _SEX 1 = "男" 2 = "女" ; run; |
以下がYNとSEXの頻度集計をPROC TABULATEで行う例です。
※集計対象が0オブザベーションの場合、今回紹介するオプションは機能しません。
※その他、注意点についても記事の下の方で紹介しています。
proc tabulate data=DT1; class YN SEX / missing preloadfmt; table (YN SEX) , n / printmiss misstext="0"; format YN _YN. SEX _SEX.; run; |
- 「preloadfmt」「printmiss」で変数に割り当てたフォーマットを使って、0件の水準も出力されるようにしてます。
- 0件の場合の表示内容を「misstext=」で指定します。今回は「"0"」と表示するようにしてます。
ちなみにclassステートメントに「missing」をつけているのは以下データステップ100万回で解説されている落とし穴予防の為です。
means summaryプロシジャのclassステートメント指定変数の欠損値には気を付けてって話
もう1つ注意ですが、
0件の水準を出すようにした結果をSASデータセットに出力すると、、
ods output Table=OUT1; proc tabulate data=DT1; class YN SEX / missing preloadfmt; table (YN SEX) , n / printmiss misstext="0"; format YN _YN. SEX _SEX.; run; ods output close; proc print data=OUT1 noobs; var YN SEX N; run; |
misstextオプションが効いてないのか、0件の水準は出るけど、「0」と出ずに欠損値で出ます。
これはまぁしょうがないかーって感じです。
ただ頻度集計・クロス集計・要約統計量の計算など、応用範囲広いのでSUMMARYやFREQよりこっち使うほうがいい場合もあるので是非TABULATEプロシジャを取り入れてみましょう。
以上、
PROC TABULATEの結果はデータセットに出力できる。
でちょっと触れたTABULATEを使った便利な機能の紹介でした。
以上、
PROC TABULATEの結果はデータセットに出力できる。
でちょっと触れたTABULATEを使った便利な機能の紹介でした。
0 件のコメント:
コメントを投稿