2014-02-21 85 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