SAS:变量列表包含带有'-'符号的名称,导致在 keep= 语句期间出错



我有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,不能真正测试它。

最新更新