2016-05-06 43 views
0

在SAS中,我拥有的数据集如下。数据步骤中的SAS使用分类变量将长数据重新整形为宽度

id A 

1 2 
1 3 
2 1 
3 1 
3 2 

ID被提供给每个单独的,A为分类变量这需要1,2或3。我想和每每个单独分离一个观测数据进入三个指示变量,说A1,A2和A3。

结果是这样的:

id A1 A2 A3 

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

没有人有任何想如何做到这一步的数据,而不是在SQL?提前致谢。

回答

1

所以你在正确的轨道上,转置说法肯定是要走的路:

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

首先要通过id来调换,使用可变答:

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; 
相关问题