2015-04-21 70 views
0

我有一個字符串28,16OB4N7L8O4L使用兩個數組我已經分裂成單獨的變量。分割字符串和創建變量使用SAS

hrs1 hrs2 hrs3 hrs4 hrs5 hrs6 hrs7  
28 16 1  4 7 8 4 

cd1 cd2 cd3 cd4 cd5 cd6 cd7 

, O B N L O L 

現在我希望跨變量來總結,如果相同的值重複在字符變量在上述例子'O''L'重複,在這種情況下我要合併爲一體,並添加相應小時。

輸出應爲:

, O B N L  -COLUMN 
28 24 1 4 11  -VALUES 
+1

你會接受,你調換數據的解決方案?也就是說,不是從14個變量(hrs1-hrs7和cd1-cd7)開始,而是將它轉換爲兩個變量hrs和cd。在這種結構中,每個組內的CD和總數分組是非常直接的。 – Quentin

+0

如何從原始字符串中獲得hrs3 = 1? – Longfish

+0

當我插入了兩個連續字符1. – Bharath

回答

3

這裏的轉置到歸一化(長瘦格式)的一個例子。我添加了第二個樣本記錄。

data have; 
    input id hrs1-hrs7 (cd1-cd7) ($1.); 
    cards; 
1 28 16 1 4 7 8 4 ,OBNLOL 
2 1 2 3 4 5 6 7 AAAABBB 
; 
run; 

data tran (keep=id hr cd)/view=tran ; 
    set have ; 
    array hrs{*} hrs1-hrs7 ; 
    array cds{*} cd1-cd7 ; 
    do i=1 to dim(hrs) ; 
    hr=hrs{i} ; 
    cd=cds{i} ; 
    output ; 
    end ; 
run ; 

proc sql ; 
    select id, cd, sum(hr) 
    from tran 
    group by id, cd 
    ; 
quit ; 

返回:

id cd 
________________ 
1 ,   28 
1 B   1 
1 L   11 
1 N   4 
1 O   24 
2 A   10 
2 B   18 
+0

謝謝!有效 – Bharath