在 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 中?提前致谢。
所以你在正确的轨道上,转置语句绝对是要走的路:
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;