长话短说。下列数据集是三组(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;