通过id计算变量的重复值

时间:2013-01-15 21:24:27

标签: count sas

我是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  

你怎么建议继续?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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;