SAS:重塑数据(堆叠)

时间:2014-01-29 05:58:06

标签: arrays sas reshape

如何在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
.............

2 个答案:

答案 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和关系)可能需要针对现实世界的例子进行更改。