每组仅保留最高排名的观察的有效方法

时间:2018-08-28 23:04:03

标签: sas

我只想保留每支队伍中排名最高的行。如果有平局,我想要具有更高rank2的行。然后是更高的等级3。

例如

data test;
input name $ team $ rank1 rank2 rank3 country $
datalines;
Bob A 5 6 5 US   
Joe A 8 2 6 UK
Dav B 9 7 2 GER
Jim B 9 4 4 FRA
Bob C 3 4 1 FRA
Dan D 5 2 7 GER
Ike D 5 2 7 US
Jay D 5 2 8 UK
run;

我想要:

Joe A 8 2 6 UK
Dav B 9 7 2 GER
Bob C 3 4 1 FRA
Jay D 5 2 8 UK

最有效的方法是什么?我正在使用的数据集很大,并且没有排序。我尝试了下面的代码,但是这些排序永远需要运行。第二种排序已经排序的数据。如果大多数团队在数据集中只出现一次怎么办?拆分为重复项和非重复项,仅对重复项进行排序然后追加,是否更快?

proc sort data=test;
by team descending rank1 descending rank2 descending rank3;
run;

proc sort data=test nodupkey;
by team;
run;

1 个答案:

答案 0 :(得分:3)

您可以使用PROC Summary完成。与您正在做的事情相比,不确定性能。

proc summary data=test nway;
   class team;
   output out=ranked(drop=_:) idgroup(max(rank:) out(name rank: country)=);
   run;

enter image description here