2015-05-02 20 views
0

假設我有一個數據集如下:如何有效地在SAS創建重複的副本

ID Col1 Col2 Col3 Value 
1 2 5  6 100 
2 32 42   999 

,我想創建一個數據集如下:

ID Col Value 
    1 2 100 
    1 5 100 
    1 6 100 
    2 32 999 
    2 42 999 

什麼是最好的方式去做這件事?請注意,我的原始數據集中缺少Col3的值,所以我只想創建新列,其中列中沒有缺失值。

回答

2

只需使用PROC TRANSPOSE即可獲得所需的輸出。 ID和Value列可以與BY語句一起使用,因爲它定義了exapanding value變量的組。

proc transpose data=input_data out=output_data(where=(col1 ne .)); 
    by id value; 
    var col1-col3; 
run; 
+0

當我轉了數據集中,產生的數據集包含多個列的每個值,但我只想要一個列。有沒有簡單的方法來指定這個? – lord12

+0

結果數據集應該只包含4列。只有1個額外的虛擬列_NAME_與您提供的結果輸出數據相比應該是額外的。無論如何,如果你想刪除/保留任何列只使用數據集選項KEEP =或DROP =就像WHERE =已被使用。 – sushil

0

或者你可以使用數組...

 
data want ; 
    set have ; 
    array c{*} col1-col3 ; 
    do i = 1 to dim(c) ; 
    if not missing(c{i}) then do ; 
     col = c{i} ; 
     output ; 
    end ; 
    end ; 
    drop col1-col3 i ; 
run ;