我有一个proc转置问题。我的代码并没有给我我想要的东西。
data have;
input name $ x y z;
cards;
jon 1 85 1300
jon 2 90 2000
jon 3 95 1800
hal 1 70 1500
hal 2 78 4000
hal 3 83 3000
;
run;
proc sort data=have;
by name;
run;
proc transpose data=have out=want;
by name;
run;
我想最终得到一个如下所示的数据集:
name y1 y2 y3 z1 z2 z3
hal 70 78 83 1500 4000 3000
jon 85 90 95 1300 2000 1800
这里最重要的是能够为每个名字获得一行。辅助是使用x变量重命名其他变量(y1,y2,y3等)的能力。我知道第一部分可能很容易。想法?
感谢。
答案 0 :(得分:4)
您需要在表单中填写 (通过变量)(变量名)(变量值)
在这种情况下,这意味着每人六行,name varname value
。
您可以轻松完成此操作:
data have_pret;
set have;
varname=cats('y',x);
value=y;
output;
varname=cats('z',x);
value=z;
output;
keep name value varname;
run;
然后你可以运行proc transpose:
proc transpose data=have_pret out=want;
by name;
id varname;
var value;
run;