sas转置数据集

时间:2014-02-21 03:47:55

标签: transactions sas dataset transpose

我有一个需要进行转置的大型事务数据集。 数据我:

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的信息转换为可以分析的数据集,请告诉我。

2 个答案:

答案 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;