2014-01-30 19 views
1

我有一個數據集,其中包含一個人的姓名以及他們獲得1-10的次數。例如,鮑勃拿下7 1,8 2和7 4,但沒有得到任何其他分數。SAS將細胞計數轉換爲特定值

Name 1 2 3 4 5 6 7 8 9 10 
Bob 7 8 7 0 0 0 0 0 0 0 
Hal 9 3 1 0 0 0 0 0 0 0 

我想有鮑勃一行看起來像這樣

Bob 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 
Hal 1 1 1 1 1 1 1 1 1 2 2 2 3 

我這樣做是在SAS的方式的數據集。

我知道我可以編寫一個宏來創建名爲score1,score2,...,scoreN的變量。

我無法填充單元格。任何幫助,將不勝感激。謝謝。

+0

您可以提供原始數據集的樣本? –

+0

Dmitry-I包含了Bob在原始數據集中的樣子的快照 – pyll

回答

1

這樣的事情 - 不斷變化的數據集的結構 - 有時更容易做PROC TRANSPOSE:

data have; 
    input Name $ v1 v2 v3 v4 v5 v6 v7 v8 v9 v10; 
    datalines; 
Bob 7 8 7 0 0 0 0 0 0 0 
; 
run; 

/*convert original wide dataset into long one*/ 
proc transpose data=have out=have_long; 
    var v:; 
    by Name; 
run; 

data want; 
    set have_long; 
    substr(_NAME_,1,1)=""; *to get rid of first 'v' in variables' names; 
    do i=1 to COL1; 
     new_var=_NAME_; 
     output; 
    end; 
    drop _NAME_ COL1 i; 
run; 

/*convert back to wide dataset*/ 
proc transpose data=want out=want(drop=_NAME_); 
    var new_var; 
    by Name; 
run; 
+0

這很完美。好的舊proc轉置!德米特里,非常感謝。 – pyll