2016-07-01 99 views
0

我有一個看起來像這樣的數據集。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度,需要花費大量的時間。也要去調試。

是否有某種功能或特殊的數組我可以申請,這將創建我正在談論的這一系列表?謝謝!

回答

3

我想你想要什麼PROC概要默認情況下。

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

+0

不能相信我忽略了這個功能。非常感謝! –