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 的次数。然后创建新的 variables count8count9这样count10我就可以获得以下输出:

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

你会建议如何进行?任何帮助将不胜感激。

4

1 回答 1

3

有很多方法可以做到这一点。这是一种简单的单数据步骤方法。

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 基本上是一堆 IF 语句的缩写(就像其他语言中的 CASE..WHEN 一样)。

顺便说一句,性别应该被删除,除非它总是通过 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 条的记录,请在 PROC FREQ 的 data=dat 部分执行此操作:

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