【问题标题】: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;