Я хочу сохранить только строку с самым высоким рангом1 для каждой команды. Если есть связь, я хочу строку с более высоким рангом2. И тогда более высокий ранг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;