【问题标题】:SAS Function that can create every possible combination可以创建所有可能组合的 SAS 函数
【发布时间】:2016-07-02 05:35:29
【问题描述】:

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

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 度并且占用了大量的时间。调试也很痛苦。

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

【问题讨论】:

    标签: arrays loops sas


    【解决方案1】:

    我认为您想要 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;
    

    【讨论】:

    • 不敢相信我忽略了这个功能。非常感谢!
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多