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

Proc转置SAS:转置和重命名变量,sas,rename,transpose,Sas,Rename,Transpose,我有一个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;

我有一个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等)。我知道第一部分可能很简单。想法


谢谢。

您需要在表格中填写 (按变量)(变量名称)(变量值)

在本例中,这意味着每人六行,带有
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;

你需要把它做成表格 (按变量)(变量名称)(变量值)

在本例中,这意味着每人六行,带有
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;
谢谢Joe——我找到了另一种方法,但你的方法看起来更有效:
数据有;输入名称$x y z;卡;乔恩1851300乔恩2902000乔恩3951800哈尔1701500哈尔2784000哈尔3833000;跑proc sort data=have;按姓名跑proc transpose data=have out=haveout;名为x;跑数据丢失;格式_name_u32。;出发;_uname_u=strip(x)| |“”| | strip(_name_uu);跑proc transpose data=haveout=want(drop=\u name\uu);按姓名col1变种;运行谢谢Joe--我找到了另一种方法,但是你的方法看起来更有效:
数据有;输入名称$x y z;卡;乔恩1851300乔恩2902000乔恩3951800哈尔1701500哈尔2784000哈尔3833000;跑proc sort data=have;按姓名跑proc transpose data=have out=haveout;名为x;跑数据丢失;格式_name_u32。;出发;_uname_u=strip(x)| |“”| | strip(_name_uu);跑proc transpose data=haveout=want(drop=\u name\uu);按姓名col1变种;运行