dxystata 发表于 2022-12-20 10:40 
还是有错
应改为使用%scan函数,之前提及的引号问题,实属跑偏了,抱歉。
我的理解是这样的:%qscan() 函数会屏蔽 & 符号,直到执行代码时才进行解析,而此时 SQL 代码由于 %qscan() 还未解析,编译过程就失败了,因此报错。具体地,SAS代码的编译、执行过程是这样:
宏编译 → 宏执行 → 普通程序编译 → 普通程序执行
%qscan() 的执行在第四步。
proc sql的编译在第三步,此时的程序为 create table _%qscan(&xvars,&i,) as ...,由于 %qscan() 尚未解析为 sex,编译工作出错了,编译器报告错误,程序中止。