【问题标题】:sas transpose data setsas转置数据集
【发布时间】:2014-03-22 09:43:13
【问题描述】:

我有一个大型交易数据集需要进行转置。 我拥有的数据:

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

【问题讨论】:

    标签: transactions sas dataset transpose


    【解决方案1】:

    您可以在一个数据步骤中转置任意数量的变量。这通常比使用 proc transpose 做同样的事情要快得多:

    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

    【讨论】:

      【解决方案2】:

      如果是大型数据集,则需要考虑效率。它需要首先在 ID 变量上排序(或索引)。此外,请确保您只保留(处理)相关变量:

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

      【讨论】:

        猜你喜欢
        • 2013-12-03
        • 1970-01-01
        • 2017-09-05
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 2014-03-07
        相关资源
        最近更新 更多