重新排序 SAS 数据集中的列

问题描述 投票:0回答:1

我有以下数据集:

身份证 X1 X2 Xn Y1 Y2 Yn
IC 01 2 4 5 5 9 8
IC 02 1 5 8 3 4 7

我想要以下内容:

身份证 X1 Y1 X2 Y2 Xn Yn
IC 01 2 5 4 9 5 8
IC 02 1 3 5 4 8 7

我在 SAS EG 中使用了转置函数,但找不到按以下顺序对列进行排序的正确方法 -> X1 - Y1 - X2 - Y2 - X3 - Y3 - ... - Xn - Yn

有什么建议也欢迎

谢谢!

sas
1个回答
0
投票

只需按照您想要的顺序定义变量即可。

 data want;
    length ID $8 X1 Y1 X2 Y2 ..... Xn Yn 8;
    set have;
 run;

或者也许您可以利用这样一个事实:使用 RETAIN 语句将强制 SAS 设置变量的位置,而不是类型。

 data want;
    retain ID X1 Y1 X2 Y2 ..... Xn Yn ;
    set have;
 run;

如果您懒得输入所有变量名称,那么只需生成它们即可。 也许有一个数据步骤:

data _null_;
   do i=1 to 20;
     put 'X' i 'Y' i @ ;
   end;
run;

然后只需从日志中复制列表并将其粘贴回您的程序中即可。

或者您可以使用宏代码来生成列表:

 %macro names(n);
   %local i;
   %do i=1 %to &n; X&i Y&i %end;
 %mend names;
 data want;
    retain ID %names(10) ;
    set have;
 run;
 
© www.soinside.com 2019 - 2024. All rights reserved.