数据步骤中的SAS将长数据重新分类为具有分类变量的宽数据

时间:2016-05-06 18:20:35

标签: sas transpose datastep

在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中?提前谢谢。

1 个答案:

答案 0 :(得分:1)

所以你在正确的轨道上,一个转置声明绝对是要走的路:

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

首先,您希望使用变量A:

按id进行转置
proc transpose data = temp
    out = temp2
    prefix = A;
    by id;
    var A;
    id A;
run;

然后,对于以A开头的所有变量,您希望将所有缺失值替换为0,将所有非缺失值替换为1。这里的retain语句重新排序你的变量:

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;