【问题标题】:SAS in data step reshape a long data into wide with categorical variable数据步骤中的 SAS 将长数据重塑为具有分类变量的宽数据
【发布时间】:2016-05-06 18:20:35
【问题描述】:

在SAS中,我有一个数据集如下。

id   A

1    2   
1    3 
2    1
3    1
3    2

ID 被赋予每个人,A 是一个分类变量,取 1、2 或 3。我想通过每个人的一次观察来获取数据,将 A 分为三个指标变量,例如 A1、A2 和 A3。

结果如下所示:

id A1 A2 A3 

1   0  1  1
2   1  0  0
3   1  1  0

有没有人想过如何在数据步骤中做到这一点,而不是在 sql 中?提前致谢。

【问题讨论】:

    标签: sas transpose datastep


    【解决方案1】:

    所以你在正确的轨道上,转置语句绝对是要走的路:

    data temp;
       input id A;
       datalines;
        1 2
        1 3
        2 1
        3 1
        3 2
    ;
    run;
    

    首先你要通过 id 转置,使用变量 A:

    proc transpose data = temp
        out = temp2
        prefix = A;
        by id;
        var A;
        id A;
    run;
    

    然后,对于所有以 A 开头的变量,您希望将所有缺失值替换为 0,并将所有非缺失值替换为 1。此处的保留语句重新排序您的变量:

    data temp3 (drop = _name_);
        retain id A1 A2 A3;
        set temp2;
        array change A:;
            do over change;
            if change~=. then change=1;
            if change=. then change=0;
            end;
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      相关资源
      最近更新 更多