SAS使用重复从宽到长的转置

SAS使用重复从宽到长的转置,sas,transpose,Sas,Transpose,我将转置下表: X Y1 Y2 Y3 a 12 3 a 2 3 4 b 7 8 9 到 xy a 1 a 2 a 3 a 2 a 3 a 4 b 7 b 8 b 9 我试过这个密码 PROC TRANSPOSE DATA=table1 OUT=table2; BY X; RUN; 然而,它给了我这个输出 X COL1 COL2 a 12 a 23 a 3 4 b 7 b 8 b 9 有人知道怎么弄到我需要的桌子吗 谢谢你的任何想法,谢谢 您可以使用以下代码,它添加一行,然后根据行进行转置。因为

我将转置下表:

X Y1 Y2 Y3

a 12 3

a 2 3 4

b 7 8 9

xy

a 1

a 2

a 3

a 2

a 3

a 4

b 7

b 8

b 9

我试过这个密码

PROC TRANSPOSE DATA=table1 OUT=table2;
BY X;
RUN;
然而,它给了我这个输出

X COL1 COL2

a 12

a 23

a 3 4

b 7

b 8

b 9

有人知道怎么弄到我需要的桌子吗


谢谢你的任何想法,谢谢

您可以使用以下代码,它添加一行,然后根据行进行转置。因为行号是唯一的

data have;
input X $ Y1 Y2 Y3;
datalines;
a 1 2 3
a 2 3 4
b 7 8 9
;
run;

data have;
set have;
row=_n_;
run;

PROC TRANSPOSE DATA=have OUT=want(rename=(COL1=Y) drop=_NAME_ row);
by row x;
RUN;

proc print data=want; run;

像下面这样的方法应该可以奏效

data want;
set have;
array name(*) Y1--Y3;
do i = 1 to dim(name);
Y=name[i];
output;
end;
Drop y1 y2 y3 i;
run;

您可以/应该使用转置步骤中的“数据集选项”重命名和删除。@data null。。谢谢你的建议。更新代码。