我有以下数据集:
身份证 | 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
有什么建议也欢迎
谢谢!
只需按照您想要的顺序定义变量即可。
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;