我是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的次数。然后创建新变量count8
,count9
和count10
,以便我可以获得以下输出:
id gender count8 count9 count10
1 1 1 3 2
2 2 1 3 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;