关于SAS 分组排序
长话短说。下列数据集是三组(adult,youth,senior)队员短跑比赛的记录。要求用SAS对各组分别进行排名。
54 youth 35.5 21 adult 21.6 6 adult 25.8 13 senior 29.0
38 senior 40.3 19 youth 39.6 3 adult 19.0 25 youth 47.3
11 adult 21.9 8 senior 54.3 41 adult 43.0 32 youth 38.6
data walkers;
infile 'c:\blabla...\walk.txt';
input ID AgeGroup $ Time @@;
proc sort ;
by agegroup time;
run;
1,自动变量法:
在上面排序的基础上,用自动变量_N_ 给time排名次(保持原来的顺序)。
data ranked_walkers;
set walkers;
Total_place = _N_;
run;
接着用if then 语句,并显示总排名和各小组排名:
DATA winners99;
SET ranked_walkers;
BY AgeGroup;
IF FIRST.AgeGroup then Group_ranking=0;
Group_ranking+1;
run;
2, Proc rank法:
Proc rank其实很简单,但有一点不好,默认的输出结果不显示var指定的变量(即这里的time),因为这个变量被ranks取代了。虽然这不是什么大问题,但看起来有点不方便。要同时显示time和最后的分组排名,需要用ranks语句建一个新变量(group_place)。
proc rank data=walkers out=winner100 ; 另外需要主意var变量后面只能跟数值型变量,不能是字符型变量。
var time;
by AgeGroup;
ranks group_place;
run;