首先,若删除 %bquote() 函数,该错误仍然存在:
因此,可暂时排除对 %bquote() 函数的怀疑。
查询帮助文档,了解到 %str() 函数在宏程序编译时,可对 "," 产生屏蔽作用。于是怀疑是 %str() 函数对逗号产生了屏蔽,使其在编译时,没有被解析为 %scan() 函数的参数分隔符。尝试另几个函数如下:
带多个参数的 %substr()
带多个参数的 %index()
带单个参数的 %upcase()
注意到当宏函数带多个参数时,SAS均报告了语法错误,而带单个参数时,则没有语法错误。至此,方才的假设成立:
%str() 函数对其内的逗号产生了屏蔽,在编译时,其内的逗号没有被解析为函数的参数分隔符。