MEANSプロシジャのnwayオプションとTYPESステートメントの話

たとえば以下のように、投与群(A群、B)、性別(男性、女性)、年齢カテゴリ(高齢者、非高齢者)という3水準と体重をもった100オブザベーションのデータセットがあるとします。(体重の作り方は超適当なので気にしないでください)


data TEST;
call streaminit(1234);
 do SUBJID=100 to 199;
  if rand('uniform')<0.5 then ARM='A群';else ARM='B群';
  if rand('uniform')<0.3 then SEX='男性';else SEX='女性';
  if rand('uniform')<0.7 then AGE='非高齢者';else AGE='高齢者';
  if SEX='男性' then WEIGHT=round(rand('normal')*15+65,0.1);
  if SEX='女性' then WEIGHT=round(rand('normal')*15+45,0.1);
  output;
 end;
run;




これに対して、以下のようにMEANSあるいはSUMMARYのclassに3水準を指定して
平均値を求めるようにしてデータセット作成を実行するとどうなるでしょうか?

proc means data=TEST noprint;
 class ARM SEX AGE;
 var WEIGHT;
 output out=OUT_1 mean=MEAN;
run;





























上記のように27オブザベーションで統計量が算出されます。

0水準の場合(全体)=1
1水準の場合を3変数に対して=2×3=6
2水準の場合を3変数から2変数を選ぶ組み合わせ全てに対して=3C2×4=12
3水準の場合 2×2×2=8

なので1+6+12+8=27となるわけです。

全部の組み合わせについて計算してくれるのは凄いのですが、これらの結果全てを使用したくて
プロシジャを実行することは少なく、だいたいは欲しい部分は決まっていると思います。

今欲しいのが一番高い水準→3水準であった場合nwayオプションを指定すると
_TYPE_の値が一番高い部分のみ抽出してくれます。

proc means data=TEST nway noprint;
 class ARM SEX AGE;
 var WEIGHT;
 output out=OUT_2 mean=MEAN;
run;



また、例えば群×性別×年齢と群×年齢の組み合わせの結果が欲しいといった場合は
TYPESステートメントで欲しい水準の組み合わせを指定します。

proc means data=TEST noprint ;
 class ARM SEX AGE;
 types ARM*SEX*AGE ARM*AGE;
 var WEIGHT;
 output out=OUT_3 mean=MEAN;
run;

すると


でめでたしめでたし





0 件のコメント:

コメントを投稿