根据列号删除列 - SAS
Dropping columns based on the column number - SAS
我有一个包含以下列的数据集:
ID, value, value1, value2
我想保留列 ID
和 value
。我想根据数字位置删除其余部分。所以 value1
和 value2
相当于 3 和 4。我想删除任何大于或等于 3 的东西。
SAS/SQL 中是否有任何语法允许我根据列的位置引用和删除列。
DATA TEST;
INPUT id $ value value1 value2;
DATALINES;
a 10 1 8
a 13 2 11
a 14 3 23
b 15 4 44
b 44 5 45
c 64 6 67
c 32 6 47
d 12 7 895
;
RUN;
谢谢。
一种方法是从 sashelp.vcolumn
中读取列,然后将前 4 列保存到宏变量中。
proc sql inobs=4;
select name
into :keepcols separated by ','
from sashelp.vcolumn
where libname = 'WORK'
AND memname = 'TEST';
proc sql;
select &keepcols
from TEST;
quit;
如果您由于某种原因不能使用字典 table,您可以使用 proc transpose
来获取列:
proc transpose data=TEST(obs=0)
out=cols;
run;
proc sql noprint inobs=4;
select _NAME_
into :keepcols separated by ','
from cols;
quit;
proc sql;
select &keepcols
from TEST;
quit;
Proc Contents 通常比字典表执行起来更快。
PROC CONTENTS DATA=sourcetable OUT=temptable NOPRINT ;
RUN ;
PROC SQL ;
SELECT name
INTO :selectclause SEPARATED BY ', '
FROM temptable
WHERE varnum LE 3
ORDER BY npos
;
CREATE TABLE shorttable AS
SELECT &selectclause
FROM sourcetable
;
QUIT ;
我有一个包含以下列的数据集:
ID, value, value1, value2
我想保留列 ID
和 value
。我想根据数字位置删除其余部分。所以 value1
和 value2
相当于 3 和 4。我想删除任何大于或等于 3 的东西。
SAS/SQL 中是否有任何语法允许我根据列的位置引用和删除列。
DATA TEST;
INPUT id $ value value1 value2;
DATALINES;
a 10 1 8
a 13 2 11
a 14 3 23
b 15 4 44
b 44 5 45
c 64 6 67
c 32 6 47
d 12 7 895
;
RUN;
谢谢。
一种方法是从 sashelp.vcolumn
中读取列,然后将前 4 列保存到宏变量中。
proc sql inobs=4;
select name
into :keepcols separated by ','
from sashelp.vcolumn
where libname = 'WORK'
AND memname = 'TEST';
proc sql;
select &keepcols
from TEST;
quit;
如果您由于某种原因不能使用字典 table,您可以使用 proc transpose
来获取列:
proc transpose data=TEST(obs=0)
out=cols;
run;
proc sql noprint inobs=4;
select _NAME_
into :keepcols separated by ','
from cols;
quit;
proc sql;
select &keepcols
from TEST;
quit;
Proc Contents 通常比字典表执行起来更快。
PROC CONTENTS DATA=sourcetable OUT=temptable NOPRINT ;
RUN ;
PROC SQL ;
SELECT name
INTO :selectclause SEPARATED BY ', '
FROM temptable
WHERE varnum LE 3
ORDER BY npos
;
CREATE TABLE shorttable AS
SELECT &selectclause
FROM sourcetable
;
QUIT ;