data Q1;
X=1;output;
X=1;output;
X=1;output;
X=2;output;
X=2;output;
X=2;output;
X=2;output;
X=3;output;
X=3;output;
X=3;output;
run;
で
proc means data=Q1 sum mean var std;
var X;
run;
となります。
これと同じことを
data Q2;
X=1;WGT=3;output;
X=2;WGT=4;output;
X=3;WGT=3;output;
run;
というようにウェイト値にして
proc means data=Q2 sum mean var std;
var X;
weight WGT;
run;
weightステートメントに指定すれば、当然同じ結果になると思い込んでいたのですが
うわっ、分散と標準偏差がえらいでかいな!ってびっくりです。
で、教えて貰ったのが
proc means data=Q2 vardef=wdf sum mean var std;
var X;
weight WGT;
run;
です。
これで実行すると
おお、よかった。
どういうことかというと
SASのデフォルトだと、ウェイトが反映された偏差平方和をウェイトが反映されてないN-1で割って分散だしちゃんですよね。
え~、なにそれ。weightステートメント使ってたらデフォルトをwgtに切り替えるぐらいしてよ。メッセージも無しに、そんな使い道のない謎値だされてもって思いました。
医薬品開発の業界にいたときは、freqで何か検定とかするときにweightステートメント使いましたが、あんまり要約統計量出す時に使った記憶がないです。
最近ウェイトバック集計とかする機会が増えて、そこで教わった次第です。
Weight / Freq ステートメントの違いが良くわからないので、Freq procedure以外は怖くて使うの控えてました。
返信削除weight WGT でなくてfreq WGTの方ならうまくいくので、おかげできちんと理解できました。
ありがとうございました。
ありがとうございます!そうか、freqステートメントもありますもんね!記事にしたこともあるのに忘れてました。ただ、元のN数とウェイト合計N数両方を出す場合が多いのでweightステートメントを使ってました。
返信削除