meansプロシジャのfreqステートメントの話

ある6人の生徒がテストを受けた結果、90点が2人、80点が3人、50点が1人でした。
さて、6人のテストの点数の、平均と標準偏差を求めよ。

って問題をproc meansで解けって言われたら、流し込むデータはどのように作りますか?

まあ、何も考えずに

data Q0;
X=90;output;
X=90;output;
X=80;output;
X=80;output;
X=80;output;
X=50;output;
run;

proc means data=Q0 noprint;
 var X;
 output out=A0;
run;

でも当然OKなのですが、freqステートメントの利用を想定すると、流し込むデータはこのようにできます。

data Q1;
X=90;Y=2;output;
X=80;Y=3;output;
X=50;Y=1;output;
run;







Xに値、Yはその値のオブザベーション数を入れます。

つまりX=90;Y=2;はX=90が2オブザベーションあるよということを示します。

そしてプロシジャは

proc means data=Q1 noprint;
 var X;
 freq Y;
 output out=A1;
run;

とすれば、結果は








です。 

冒頭
先述のコードと同じになります。

freqで指定した変数の値分、オブザベーションを読み込んだとみなして、計算してくれるわけです。
オブザベーション数なので整数である必要があります。小数を指定しても切り捨てられます。
また1未満の数や0を入れた場合、その値は0オブザベーション、つまり無いものとして扱われます。


意外と知られていないステートメントの気がしますが、考えれば使いどころは結構あります。



0 件のコメント:

コメントを投稿