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
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;
解决方案
推荐阅读
- javascript - 从另一个页面元素链接到特定的数据过滤器
- pip - `pip` 突然中断?with `pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。`
- java - JavaFX中一个ListView中的2个不同列表除以标题
- android - 我正在尝试按名称搜索用户,并将一些数据加载到 Recycleview。但是代码不起作用。有人可以帮我吗
- python - 如何通过 Windows 内置命令对二进制文件进行编码/解码?
- git - 我的更改没有推送到我的主存储库
- ibm-midrange - RUNSQLSTM - 在 IBM i 上 - 创建或附加数据
- java - api的异常处理和错误响应
- java - 知道我的 RecursiveTask 将在哪个 ForkJoinPool 上执行
- python - Pandas 日期时间索引 - 提取周、月、年