PROC SQL
не поддерживает аналитические функции заказа, такие как rank()
, как в других разновидностях SQL; Тем не менее, существует множество способов получения ранга по группам. Вот несколько вариантов, которые вы можете использовать.
Опция 1: PRO C RANK
proc rank
делает именно то, на что это похоже: оценивает вещи. Обратите внимание, что ваши данные должны быть отсортированы, если они используются в SAS 9 или SPRE.
proc rank data=sashelp.cars
out=want(where=(msrp_rank LE 5))
descending;
by make;
var msrp; /* Variable to rank */
ranks msrp_rank; /* Name of variable holding ranks */
run;
Вариант 2: Шаг данных
Вы можете ранжировать, используя шаг данных. Обратите внимание, что ваши данные должны быть отсортированы при использовании SAS 9 или SPRE.
proc sort data=sashelp.cars
out=cars;
by make descending msrp;
run;
data want;
set cars;
by make descending msrp;
if(first.make) then Rank = 0;
Rank+1;
if(Rank LE 5);
run;
Опция 3: simple.topK CAS Action
Если у вас есть Viya, вы можете используйте действия CAS для быстрого ранжирования больших наборов данных. Это можно использовать как в SAS, так и в Python с пакетом SWAT.
/* Load sashelp.cars into CAS */
data casuser.cars;
set sashelp.cars;
run;
proc cas;
simple.topk result=r /
table = {caslib='casuser' name='cars' groupby='make'}
casout = {caslib='casuser' name='cars_top_5' replace=true}
aggregator ='max'
bottomK = 0
topK = 5
inputs = {{name='msrp'}}
;
quit;