Sas 为每组保留最高级别观察的有效方法
我只想为每支球队保留排名最高的那一排。如果打成平局,我希望这一排的分数更高。然后是更高的等级3 比如说,Sas 为每组保留最高级别观察的有效方法,sas,Sas,我只想为每支球队保留排名最高的那一排。如果打成平局,我希望这一排的分数更高。然后是更高的等级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
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;
您可以使用PROC SUMMARY来实现这一点。与您已经在做的工作相比,不确定性能
proc summary data=test nway;
class team;
output out=ranked(drop=_:) idgroup(max(rank:) out(name rank: country)=);
run;
请在示例数据中添加领带示例以及该领带记录的预期输出。不太明白你想怎么处理。您必须保留此数据结构吗?使用长数据集比使用宽数据集容易得多。如果所有三个列都有关联,它可以选择任何关联的行。我宁愿保留数据结构。