Мне нужно найти 5 лучших Transaction_Due_Date в Pro c sql - PullRequest
0 голосов
/ 13 января 2020

Этот код работает для верхнего значения, но мне нужны 5 лучших значений
enter image description here

proc sql;                                                                                                                                                      
create table cash.gO5 as                                                                                                                                         

select * , max(Transaction_Due_Date) as max1 format = date9.                                                                                                     
from cash.Orders_Dim65                                                                                                                                           
group by Customer_Name;                                                                                                                                          

quit;  

1 Ответ

1 голос
/ 13 января 2020

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;
...