Sas 我需要在Proc sql中找到前5个事务到期日

Sas 我需要在Proc sql中找到前5个事务到期日,sas,proc-sql,Sas,Proc Sql,此代码适用于最高值,但我需要最高5个值 proc-sql; 将表cash.gO5创建为 选择*,max(交易到期日)作为max1格式=date9。 来自现金。订单号65 按客户名称分组; 退出 PROC-SQL不支持顺序分析函数,如其他风格的SQL中的rank();然而,有很多方法可以让你得到一个组排名。以下是一些您可以使用的选项 选项1:过程等级 proc-rank完全按照它听起来的样子:排序。请注意,如果在SAS 9或SPRE中使用数据,则必须对其进行排序 proc rank data=s

此代码适用于最高值,但我需要最高5个值

proc-sql;
将表cash.gO5创建为
选择*,max(交易到期日)作为max1格式=date9。
来自现金。订单号65
按客户名称分组;
退出

PROC-SQL
不支持顺序分析函数,如其他风格的SQL中的
rank()
;然而,有很多方法可以让你得到一个组排名。以下是一些您可以使用的选项

选项1:过程等级

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;
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;
选项2:数据步骤

您可以使用数据步骤进行排名。请注意,如果使用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;
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操作

如果您有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;

使用SQL的要求从何而来?