SAS重复放置从宽到长

时间:2019-04-04 15:48:24

标签: sas transpose

我将转置下表:

X Y1 Y2 Y3

a 1 1 2 2 3

a 2 2 3 3 4

b 7 7 8 8 9

X

a 1

a 2

a 3

a 2

a 3

a 4

b 7

b 8 8

b 9 9

我尝试过此代码

PROC TRANSPOSE DATA=table1 OUT=table2;
BY X;
RUN;

但是,它给了我这个输出

X COL1 COL2

a 1 1 2 2

a 2 2 3 3

a 3 3 4

b 7

b 8 8

b 9 9

有人可以获取我需要的桌子吗?

感谢任何想法,谢谢!

2 个答案:

答案 0 :(得分:1)

类似下面的东西应该起作用

$id

答案 1 :(得分:0)

您可以使用以下代码,它添加一行,然后基于行进行转置。由于行号是唯一的

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;