【问题标题】:Reshaping a SAS Table not using IML不使用 IML 重塑 SAS 表
【发布时间】:2021-04-01 01:28:31
【问题描述】:

我想知道是否可以在不使用 SAS/IML 生成 want 表的 SAS 中重塑以下 have 表。

有:

+--------+------+------+------+
|  NAME  | var1 | var2 | var3 |
+--------+------+------+------+
| Q1_ID1 |    1 |    2 |    3 |
| Q1_ID2 |    4 |    5 |    6 |
| Q2_ID1 |    7 |    8 |    9 |
| Q2_ID2 |   10 |   11 |   12 |
| Q3_ID1 |   13 |   14 |   15 |
| Q3_ID2 |   16 |   17 |   18 |
+--------+------+------+------+

想要:

+----------+----+----+----+
|   NAME   | Q1 | Q2 | Q3 |
+----------+----+----+----+
| var1_ID1 |  1 |  7 | 13 |
| var1_ID2 |  4 | 10 | 16 |
| var2_ID1 |  2 |  8 | 14 |
| var2_ID2 |  5 | 11 | 17 |
| var3_ID1 |  3 |  3 | 15 |
| var3_ID2 |  6 |  6 | 18 |
+----------+----+----+----+

重现have表的代码如下:

data have;
infile datalines delimiter=",";
input NAME :$8. var1 :8. var2 :8. var3 :8.;
datalines;
Q1_ID1,1,2,3
Q1_ID2,4,5,6
Q2_ID1,7,8,9
Q2_ID2,10,11,12
Q3_ID1,13,14,15
Q3_ID2,16,17,18
;
run;

【问题讨论】:

    标签: arrays dataframe sas transpose sas-iml


    【解决方案1】:

    需要两个转置,其中一些是分开的,然后是放在一起的。

    data have;
    infile datalines delimiter=",";
    input NAME :$8. var1 :8. var2 :8. var3 :8.;
    datalines;
    Q1_ID1,1,2,3
    Q1_ID2,4,5,6
    Q2_ID1,7,8,9
    Q2_ID2,10,11,12
    Q3_ID1,13,14,15
    Q3_ID2,16,17,18
    ;
    run;
    
    proc transpose data=have out=stage;
      by name;
      var var:;
    run;
    
    data stage2(keep=name col1 qtr);
      set stage;
      qtr = scan(name,1,'_');           * tear apart;
      id = scan(name,2,'_');
      name = catx('_', _name_, id);     * put together;
    run;
    
    proc sort data=stage2;
      by name qtr;
    run;
    
    proc transpose data=stage2 out=want;
      by name;
      id qtr;
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多