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

SAS:变量列表包含带'-';符号,导致keep=语句期间出错,sas,enterprise-guide,Sas,Enterprise Guide,我有多变量的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(

我有多变量的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:应为变量名

错误:保留选项的值无效

错误:无效的选项名称-000

错误:由于上述错误或警告,无法处理file OUT.SEQ_SUMM的某些选项

我知道如果我要像这样列出变量:

(keep=BPT_Cat'H9999-999-999-999'n'H9999-999-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,我无法真正测试它。

考虑设置
选项validvarname=V7
,这样您就不必以任何名义处理它了。这对标签很有用,但在编码时处理整体和明确的问题会很麻烦。