如何在SAS中重塑此数据?
id q1a q2a q1b q2b q1c q2c
1 3 0 1 1 1 9
2 4 9 1 2 2 0
3 5 9 1 2 4 0
进入这个:
id q1 q2 type
1 3 0 a
1 1 1 b
1 1 9 c
.............
答案 0 :(得分:0)
最简单的方法是转置数据,从q变量中分出最后一个字母,然后重新转置。
data have;
input id q1a q2a q1b q2b q1c q2c;
datalines;
1 3 0 1 1 1 9
2 4 9 1 2 2 0
3 5 9 1 2 4 0
;
run;
proc transpose data=have out=temp1;
by id;
run;
data temp2;
set temp1;
length type $1;
type=substr(_NAME_,3);
_NAME_=substr(_NAME_,1,2);
run;
proc transpose data=temp2 out=want (drop=_:) ;
by id type;
id _NAME_;
var COL1;
run;
答案 1 :(得分:0)
对我来说似乎更简单一点。
data want;
set have;
array qs q:;
do _t = 1 to dim(qs) by 2;
q1=qs[_t];
q2=qs[_t+1];
type = substr(vname(qs[_t]),3,1);
output;
end;
keep id q1 q2 type;
run;
这适用于您的数据;有一些假设(q1 / q2之间的substr和关系)可能需要针对现实世界的例子进行更改。