0

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

4

1 回答 1

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;
于 2016-05-06T20:17:28.213 回答