我有一个需要进行转置的大型事务数据集。 数据我:
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 :(得分: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
答案 1 :(得分:0)
如果它是一个大型数据集,您需要考虑效率。它需要首先(或索引)在ID变量上排序。另外,确保您只保留(处理)相关变量:
proc transpose data=input(keep=id prod) out=output(drop=_name_) prefix=PROD_;
by id;
var prod;
run;