0

私はSASの最初の一歩を踏み出しましたが、解決できない次の問題が発生しました。

私のデータセットが次のようになっているとします。

data dat;
  input id score gender;
  cards;
  1 10 1
  1 10 1
  1 9 1
  1 9 1
  1 9 1
  1 8 1
  2 9 2
  2 8 2
  2 9 2
  2 9 2
  2 10 2
  ;
run;

score私がする必要があるのは、変数がIDによって値8、9、および10をとる回数を数えることです。次に、新しい変数を作成しcount8count9count10の出力を取得できるようにします。

  id     gender    count8    count9    count10
   1        1         1          3        2
   2        2         1          3        1  

続行することをどのように提案しますか?どんな助けでも大歓迎です。

4

1 に答える 1

3

それを行う方法はたくさんあります。これが単純な1データステップのアプローチです。

data want;
set dat;
by id;
if first.id then do;
  count8=0;
  count9=0;
  count10=0;
end;
select(score);
  when(8) count8+1;
  when(9) count9+1;
  when(10) count10+1;
  otherwise;
end;
if last.id then output;
keep id count8 count9 count10;
run;

SELECT ... WHENは、基本的に(他の言語のCASE..WHENのように)一連のIFステートメントを短縮したものです。

ちなみに、性別は、IDで常に同じでない限り(または、それで数えるつもりがない限り)、削除する必要があります。

これよりも柔軟なアプローチは、PROC FREQ(またはPROC MEANSまたは...)を使用して転置することです。

proc freq data=dat noprint;
tables id*score/out=want_pre;
run;

proc transpose data=want_pre out=want prefix=count;
by id;
id score;
var count;
run;

本当に8,9,10のみが必要で、8未満のレコードをドロップしたい場合は、PROCFREQのdata=dat部分で実行してください。

proc freq data=dat(where=(score ge 8)) noprint;
于 2013-01-15T21:48:57.973 に答える