2014-02-21 83 views
0

我有一個大的事務數據集需要做轉置。 數據我有:sas轉置數據集

id  prod 
1   A 
1   B 
1   C 
1   B 
1   B 
2   A 
2   B 
2   B 
2   B 
2   D 

我需要將其移至

id PROD_1 PROD_2 PROD_3 
1  A  B  C 
2  A  B  D 

有很多變數需要做這種類型的工作。任何幫助是極大的讚賞。現在真的沒有線索。 或者如果您有更好的想法將這些關於prod的信息轉換爲可以分析的數據集,請告訴我。

回答

0

如果它是一個大型數據集,則需要考慮效率。它需要先在ID變量上排序(或編入索引)。另外,請確保只保留(處理)相關變量:

proc transpose data=input(keep=id prod) out=output(drop=_name_) prefix=PROD_; 
by id; 
var prod; 
run; 
1

在一個數據步驟中,您可以隨意調換任意數量的變量。這通常是比PROC轉做同樣的事情快得多:

data want; 
    if 0 then set have; /*Keeps all columns in the original order*/ 
    array prods[5] $ prod1-prod5; 
    do _n_ = 1 by 1 until(last.id); 
    set have; 
    by id; 
    prods[_n_] = prod; 
    run; 
run; 

只需添加更多的陣列所必需的要轉的每個變量。這假設你只想查看每個id的相同行數 - 如果你不確定有多少行,你需要做一個額外的初始過程來確定你需要多大的數組來創建數組。

這種技術被稱爲DOW循環。更多閱讀: http://analytics.ncsu.edu/sesug/2010/BB13.Dorfman.pdf