meansプロシジャのweightステートメントを使用した時の分散とか標準偏差の話

最近まで知らなくて、凄いびっくりしたのですが

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ステートメント使いましたが、あんまり要約統計量出す時に使った記憶がないです。
最近ウェイトバック集計とかする機会が増えて、そこで教わった次第です。


2 件のコメント:

  1. Weight / Freq ステートメントの違いが良くわからないので、Freq procedure以外は怖くて使うの控えてました。
    weight WGT でなくてfreq WGTの方ならうまくいくので、おかげできちんと理解できました。
    ありがとうございました。

    返信削除
  2. ありがとうございます!そうか、freqステートメントもありますもんね!記事にしたこともあるのに忘れてました。ただ、元のN数とウェイト合計N数両方を出す場合が多いのでweightステートメントを使ってました。

    返信削除