SAS功能可以创建所有可能的组合

时间:2016-07-01 21:27:00

标签: arrays loops sas

我有一个看起来像这样的数据集。

data test;
   input cat1 $ cat2 $ score;
   datalines;
A D 1
A D 2
A E 3
A E 4
A F 4
B D 3
B D 2
B E 6 
B E 5
B F 6
C D 8
C D 5
C E 4
C E 12
C E 2
C F 7
;
run;

我想基于此表创建表格,这些表格是此数据的汇总形式。例如,我想要一个表将每个cat1和cat2的每个分数相加,就像这样

proc sql;
create table all as select
    'all' as cat1
    ,'all' as cat2
    ,sum(score) as score
from test
group by 1,2
;quit;

我想要一张表来总结cat1 ='A'的所有分数,尽管cat2是这样的,就像这样

proc sql;
create table a_all as select
    cat1
    ,'all' as cat2
    ,sum(score) as score
from test
where
    cat1='A'
group by 1,2
;quit;

我想要一张表来总结cat1 ='A'和cat2 ='E'的分数,就像这样

proc sql;
create table a_e as select
    cat1
    ,cat2
    ,sum(score) as score
from test
where
    cat1='A'
    and
    cat2='E'
group by 1,2
;quit;

依此类推。我想要一套包含各种可能组合的综合表格。如果它们有效,我可以使用循环。我正在使用的真实数据集有8个类别(而不是这里的2个),在这些类别中,有多达98个级别。所以我写的循环已经嵌套了8度,占用了大量的时间。调试也很痛苦。

我可以应用某种功能或特殊数组来创建我正在谈论的这一系列表吗?谢谢!

1 个答案:

答案 0 :(得分:3)

我认为你想要PROC SUMMARY默认做什么。

data test;
   input cat1 $ cat2 $ score;
   datalines;
A D 1
A D 2
A E 3
A E 4
A F 4
B D 3
B D 2
B E 6 
B E 5
B F 6
C D 8
C D 5
C E 4
C E 12
C E 2
C F 7
;
run;
proc print;
   run;
proc summary data=test chartype;
   class cat:;
   output out=summary sum(score)=;
   run;
proc print;
   run;

enter image description here