我的问题可能很愚蠢,但我还没有找到答案.我有一个变量var index by tens:var10,var20 ... var90.在我的代码的某些方面,我想放弃所有这些.
我可以
data want(drop=var10 var20 var30 var40 var50 var60 var70 var80 var90);
set have;
run;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种更为浓缩的方式.我知道是否有变量索引10,11,12,13 ...我可以使用
(drop=var10-90)
Run Code Online (Sandbox Code Playgroud)
但是因为我没有它们,如果我使用这个指令它仍然可以完成这项工作,但是有一个警告,这对我来说是不可接受的(我必须创建程序,这些程序将由几乎没有编程知识的人使用,所以他们会报告像这样的警告).
提前致谢
如果var<xx>变量都是十的倍数,即没有其他变量开头var,则可以使用冒号运算符,它充当通配符,例如
drop var: ; /* drop all variables beginning with 'var' */
或者,您可以动态生成所有变量的列表:
proc sql noprint ;
select name into :VARLIST separated by ' '
from dictionary.columns
where libname = 'WORK'
and memname = 'HAVE'
and compress(name,,'ka') = 'VAR'
and mod(input(compress(name,,'kd'),8.),10) = 0 /* convert var<xx> to xx and check divisible by 10 */
order by name ;
quit ;
data want (drop=&VARLIST) ;
set have ;
run ;