【问题标题】:SAS Data formatting (reverse proc transpose?)SAS 数据格式化(反向 proc 转置?)
【发布时间】:2013-11-27 16:57:20
【问题描述】:
    Q1  Q2  Q3   Q4
A   1   2   3   4
B   1   2   3   4
C   1   2   3   
D   1   2       
E   1   2   3   4

我有上面的数据,想将数据导入并重新调整为如下所示:

    Qtr var1
A   Q1  1
A   Q2  2
A   Q3  3
A   Q4  4
B   Q1  1
B   Q2  2
B   Q3  3
B   Q4  4
C   Q1  1
C   Q2  2
C   Q3  3
D   Q1  1
D   Q2  2
E   Q1  1
E   Q2  2
E   Q3  3
E   Q4  4

这似乎是一个“proc transpose”,但它是相反的。

请帮忙!

【问题讨论】:

    标签: sas


    【解决方案1】:

    为什么不坚持使用 PROC TRANSPOSE。它可以从宽到长,也可以从长到宽。

    data have;
    input ID $ Q1  Q2  Q3   Q4;
    datalines;
    A   1   2   3   4
    B   1   2   3   4
    C   1   2   3   .
    D   1   2   .   . 
    E   1   2   3   4
    ;
    run;
    
    proc transpose data=have out=want name=Qtr;
    by ID;
    run;
    

    【讨论】:

    • 天哪。有用。我认为它只是以一种方式而不是另一种方式做到的。非常感谢。
    【解决方案2】:

    基本概念是数据步长数组。

    data want;
    set have;
    array qs q1-q4;
    do _t = 1 to dim(qs);
      quarter=vname(qs[_t]);
      var1=qs[_t];
      output;
    end;
    drop _t;
    run;
    

    【讨论】:

    • 乔,谢谢您的回复。有没有什么方法可以在不使用数组语句指定变量名的情况下做到这一点?
    • 这完全取决于您的数据。你可以说array qs Q:; 包含所有Q;你可以说array qs _numeric_; 包含所有数字变量。
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多