Proc Transpose SAS:转置和重命名变量

pyl*_*yll 2 transpose rename sas

我有一个过程转置问题。我拥有的代码并不能完全满足我的需求。

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;
Run Code Online (Sandbox Code Playgroud)

我想最终得到一个如下所示的数据集:

name  y1  y2  y3  z1    z2    z3
hal   70  78  83  1500  4000  3000
jon   85  90  95  1300  2000  1800
Run Code Online (Sandbox Code Playgroud)

这里最重要的是能够为每个名字获取一行。其次是能够使用 x 变量重命名其他变量(y1、y2、y3 等)。我知道第一部分可能很简单。想法?

谢谢。

Joe*_*Joe 5

您需要将其制成(通过变量)(变量名称)(变量值)的形式

在本例中,这意味着每人六行,其中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;
Run Code Online (Sandbox Code Playgroud)

然后你可以运行 proc transpose:

proc transpose data=have_pret out=want;
 by name;
 id varname;
 var value;
run;
Run Code Online (Sandbox Code Playgroud)