SAS - proc sql - select 列属于一起?
SAS - proc sql - select columns belonging together?
我想在 PROC SQL(也许使用宏?)中按列名称拆分具有许多 (454) 列的 table。
例如:某列以 "Column21....T"、"Column22....T" 等开头。
我想将所有以 "Column21...T" 开头的列写入名为 First 的数据集,并将所有以 "Column22....T" 开头的列写入名为 Second 的数据集,等等.
我想保留转置后的第一列和第二列 table 因为它们包含描述行。
我无法使用 select column1, column2.... Column454 因为列数太多。
我该怎么做?
(@Mod: 感谢清理:))
编辑,一张图说明一切:
This is my transposed table with 454 columns
PROC SORT
DATA=work.stat(KEEP=A_ B_ C_ D_ Vx G Vy)
OUT=work.stat2;
BY G;
RUN;
PROC TRANSPOSE DATA=work.stat2
OUT=WORK.x(LABEL="Transposed")
PREFIX=Column
LET
NAME=Source
LABEL=Label;
BY G;
ID Vx;
IDLABEL Vy;
VAR A_ B_ C_ D_;
RUN;
您可以使用:
后缀来制作变量列表。
data first ;
set have ;
keep id1 id2 column21: ;
run;
data second ;
set have ;
keep id1 id2 column22: ;
run;
已更新,提供了更多详细信息。
那么为什么不单独转置每个组呢?制作一个宏来转置 Vx
.
的一个值
%macro split(value);
PROC TRANSPOSE DATA=work.stat2
OUT=WORK.Column&value (LABEL="Transposed Vx=&value")
PREFIX=Column
LET
NAME=Source
LABEL=Label
;
BY G;
WHERE Vx=&value ;
ID Vx;
IDLABEL Vy;
VAR A_ B_ C_ D_;
RUN;
%mend split ;
然后为每个 Vx 值调用一次。
proc sort data=work.stat2(keep=Vx) nodupkey out=Vx_list ;
by Vx ;
run;
data _null_;
set Vx_list;
call execute(cats('%nrstr(%split)(',Vx,')'));
run;
宏程序:
%macro split(data,outdata);
%do i=21 %to 121;
data &outdata.&i;
set &data;
keep id1 id2 col&i:;
run;
%end;
%mend;
我想在 PROC SQL(也许使用宏?)中按列名称拆分具有许多 (454) 列的 table。
例如:某列以 "Column21....T"、"Column22....T" 等开头。
我想将所有以 "Column21...T" 开头的列写入名为 First 的数据集,并将所有以 "Column22....T" 开头的列写入名为 Second 的数据集,等等.
我想保留转置后的第一列和第二列 table 因为它们包含描述行。
我无法使用 select column1, column2.... Column454 因为列数太多。
我该怎么做?
(@Mod: 感谢清理:))
编辑,一张图说明一切:
This is my transposed table with 454 columns
PROC SORT
DATA=work.stat(KEEP=A_ B_ C_ D_ Vx G Vy)
OUT=work.stat2;
BY G;
RUN;
PROC TRANSPOSE DATA=work.stat2
OUT=WORK.x(LABEL="Transposed")
PREFIX=Column
LET
NAME=Source
LABEL=Label;
BY G;
ID Vx;
IDLABEL Vy;
VAR A_ B_ C_ D_;
RUN;
您可以使用:
后缀来制作变量列表。
data first ;
set have ;
keep id1 id2 column21: ;
run;
data second ;
set have ;
keep id1 id2 column22: ;
run;
已更新,提供了更多详细信息。
那么为什么不单独转置每个组呢?制作一个宏来转置 Vx
.
%macro split(value);
PROC TRANSPOSE DATA=work.stat2
OUT=WORK.Column&value (LABEL="Transposed Vx=&value")
PREFIX=Column
LET
NAME=Source
LABEL=Label
;
BY G;
WHERE Vx=&value ;
ID Vx;
IDLABEL Vy;
VAR A_ B_ C_ D_;
RUN;
%mend split ;
然后为每个 Vx 值调用一次。
proc sort data=work.stat2(keep=Vx) nodupkey out=Vx_list ;
by Vx ;
run;
data _null_;
set Vx_list;
call execute(cats('%nrstr(%split)(',Vx,')'));
run;
宏程序:
%macro split(data,outdata);
%do i=21 %to 121;
data &outdata.&i;
set &data;
keep id1 id2 col&i:;
run;
%end;
%mend;