我有SAS数据集,其中包含多个变量,如H9999-999-999-999。然而,我需要删除不必要的列,并使用变量列表(ParamList)来做到这一点:
proc sql;
select _NAME_ into :ParamList separated by ' '
from uniquePlanList;
quit;
%put ParamList = &ParamList.;
proc sql;
create table test as
select * from out.seq_summ(keep=BPT_Cat &ParamList.);
run;
因为我的变量包含"-"符号,我收到以下错误:
错误214-322:变量名称-无效。
错误214-322:变量名称000无效。
错误80-322:应为变量名。
错误:KEEP选项的值无效。
错误:无效的选项名称-000。
错误:由于上述错误或警告,文件OUT.SEQ_SUMM的某些选项未被处理。
我知道如果我列出这样的变量:
(keep=BPT_Cat’H9999-999-999-999'n’H9999999-999-998'n)
然后代码就可以工作了。但我有一些包含数百个变量的数据集。有没有比使用变量列表更好的方法来删除不必要的列?或者有什么聪明的方法可以将变量列表作为字符串读取?我试过使用这个:
(keep=BPT_Cat%str(&ParamList.)),但这给了我与上面相同的错误。
使用NLITERAL()
函数以可在代码中使用的形式生成名称。
proc sql noprint;
select nliteral(_NAME_)
into :ParamList separated by ' '
from uniquePlanList
;
quit;
怎么样:
proc sql;
select quote(_NAME_)||"n" into :ParamList separated by ' '
from uniquePlanList;
quit;
%put ParamList = &ParamList.;
proc sql;
create table test as
select * from out.seq_summ(keep=BPT_Cat &ParamList.);
run;
现在没有SAS,不能真正测试它。