Sas 数据集上的自定义分组

Sas 数据集上的自定义分组,sas,Sas,我有以下根据变量“node”分组的数据。我想把一些数据分组。有没有比以下更优雅的方法: proc sql; create table delete (t0avgStakeRank num, eventtime num, previousnode char(10), bettors num); quit; proc sql; insert into delete

我有以下根据变量“node”分组的数据。我想把一些数据分组。有没有比以下更优雅的方法:

    proc sql;  
create table delete
       (t0avgStakeRank num,
        eventtime num,
        previousnode char(10),
bettors num);
quit;

proc sql;  
insert into delete                                                                                                                 
(t0avgStakeRank, eventtime, previousnode, bettors)                                                                                         
    values(0,1,' ',1000)
    values(0,2, 'L',500)
    values(0,2, 'W',500)
    values(0,3, 'LL',250)
    values(0,3, 'LW',250)
    values(0,3, 'WL',250)
    values(0,3, 'WW',250)
    values(0,4, 'LLL',125)
    values(0,4, 'LLW',125)
    values(0,4, 'LWL',125)
    values(0,4, 'LWW',125)
    values(0,4, 'WLL',125)
    values(0,4, 'WLW',125)
    values(0,4, 'WWL',125)
    values(0,4, 'WWW',125)
    values(0,5, 'LLLL',62.5)
    values(0,5, 'LLLW',62.5)
    values(0,5, 'LLWL',62.5)
    values(0,5, 'LLWW',62.5)
    values(0,5, 'LWLL',62.5)
    values(0,5, 'LWLW',62.5)
    values(0,5, 'LWWL',62.5)
    values(0,5, 'LWWW',62.5)
    values(0,5, 'WLLL',62.5)
    values(0,5, 'WLLW',62.5)
    values(0,5, 'WLWL',62.5)
    values(0,5, 'WLWW',62.5)
    values(0,5, 'WWLL',62.5)
    values(0,5, 'WWLW',62.5)
    values(0,5, 'WWWL',62.5)
    values(0,5, 'WWWW',62.5)
    values(1,1, '',1000)
    values(1,2, 'L',500)
    values(1,2, 'W',500)
    values(1,3, 'LL',250)
    values(1,3, 'LW',250)
    values(1,3, 'WL',250)
    values(1,3, 'WW',250)
    values(1,4, 'LLL',125)
    values(1,4, 'LLW',125)
    values(1,4, 'LWL',125)
    values(1,4, 'LWW',125)
    values(1,4, 'WLL',125)
    values(1,4, 'WLW',125)
    values(1,4, 'WWL',125)
    values(1,4, 'WWW',125)
    values(1,5, 'LLLL',62.5)
    values(1,5, 'LLLW',62.5)
    values(1,5, 'LLWL',62.5)
    values(1,5, 'LLWW',62.5)
    values(1,5, 'LWLL',62.5)
    values(1,5, 'LWLW',62.5)
    values(1,5, 'LWWL',62.5)
    values(1,5, 'LWWW',62.5)
    values(1,5, 'WLLL',62.5)
    values(1,5, 'WLLW',62.5)
    values(1,5, 'WLWL',62.5)
    values(1,5, 'WLWW',62.5)
    values(1,5, 'WWLL',62.5)
    values(1,5, 'WWLW',62.5)
    values(1,5, 'WWWL',62.5)
    values(1,5, 'WWWW',62.5);                                                                                                                                                                                                   
quit; 

proc sort data=delete; by t0AvgStakeRank; run;
proc tabulate data=delete missing;
    title ' ';
    var bettors;
    class t0avgstakerank eventTime previousnode;
    table t0avgstakerank=""*eventTime=" "*(previousnode=" "), bettors*sum;
run;
到目前为止,我一直都是这样做的,这样我就可以在各组之间合计总数

proc sql;
create table grouped as 
select distinct
t0avgstakerank,
eventtime,

case when previousnode in ( 'LW', 'WL') then "LW/WL"
when previousnode in ( 'LLW', 'LWL', 'LWW') then "LLW/LW*"
when previousnode in ( 'WLL', 'WLW', 'WWL') then  "WL*/WWL"
when previousnode in ( 'LLLW', 'LLWL', 'LLWW','LWLL') then "LLLW/LLW*/LWLL"
when previousnode in ( 'LWLW', 'LWWL','LWWW','WLLL','WLLW','WLWL') then "LWLW/LWW*/WLL*/WLWL"
when previousnode in ( 'WLWW','WWLL','WWLW','WWWL') then "WLWW/WWL*/WWWL"
else previousnode  end as previousnode_grouped,

case when previousnode in ( 'LW', 'WL') then (select sum(bettors) from delete as sub where previousnode in ( 'LW', 'WL') and sub.t0avgstakerank = main.t0avgstakerank) 
when previousnode in ( 'LLW', 'LWL', 'LWW') then (select sum(bettors) from delete as sub where previousnode in ( 'LLW', 'LWL', 'LWW') and sub.t0avgstakerank = main.t0avgstakerank) 
when previousnode in ( 'WLL', 'WLW', 'WWL') then (select sum(bettors) from delete as sub where previousnode in ( 'WLL', 'WLW', 'WWL') and sub.t0avgstakerank = main.t0avgstakerank) 
when previousnode in ( 'LLLW', 'LLWL', 'LLWW','LWLL') then (select sum(bettors) from delete as sub where previousnode in ( 'LLLW', 'LLWL', 'LLWW','LWLL') and sub.t0avgstakerank = main.t0avgstakerank) 
when previousnode in ( 'LWLW', 'LWWL','LWWW','WLLL','WLLW','WLWL') then (select sum(bettors) from delete as sub where previousnode in ( 'LWLW', 'LWWL','LWWW','WLLL','WLLW','WLWL') and sub.t0avgstakerank = main.t0avgstakerank) 
when previousnode in ( 'WLWW','WWLL','WWLW','WWWL') then (select sum(bettors) from delete as sub where previousnode in ('WLWW','WWLL','WWLW','WWWL') and sub.t0avgstakerank = main.t0avgstakerank) 
else bettors end as bettors_grp

  from delete main;

退出

我将编写一种格式,按照您的需要折叠这些组。我不清楚模式是什么,但代码至少和上面一样短,如果有任何模式,代码可能会更短。如果值在组中求和,就可以了。该模式只是将一个标准的1*2*4*8*16决策树折叠成一个1*2*3*4*5 Pascal的三角形类型的树。也许然后在一个新变量中对L/W进行排序,然后按该变量进行排序,然后使用原始的LWL作为开始,并使用LLW(排序)作为PROC格式的标签。