我有一个包含以下列的数据集:
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;
感谢。
答案 0 :(得分:3)
一种方法是从sashelp.vcolumn
读取列,然后将前4列保存到宏变量中。
proc sql inobs=4;
select name
into :keepcols separated by ','
from TEST
where libname = 'WORK'
AND memname = 'TEST';
proc sql;
select &keepcols
from TEST;
quit;
如果由于某种原因无法使用字典表,可以使用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;
答案 1 :(得分:2)
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 ;