SAS宏函数%sysfunc调用catx()时意外解析问题求助
解决SAS中%sysfunc调用catx时文本被解析为表达式的问题
当使用%sysfunc()调用DATA步的catx()函数时,若传递的参数包含>/<这类比较运算符,SAS会将其当作DATA步逻辑表达式求值,而非保留原始文本——这就是你得到1, test text或0, test text的原因。
要避免这种意外解析,有两种直接的解决方法:
方法一:用引号包裹目标文本
在%sysfunc()的参数中,给需要保留的文本加上双引号(或单引号),让DATA步将其识别为字符串常量,catx()就会直接使用原始文本:
%let newtext=%sysfunc(catx(%str(, ), "grade>80", "test text")); %put &=newtext; %let newtext=%sysfunc(catx(%str(, ), "grade<80", "test text")); %put &=newtext;
运行结果:
NEWTEXT=grade>80, test text NEWTEXT=grade<80, test text
方法二:用putc函数显式转换为字符型
通过DATA步的putc()函数,将目标文本显式转换为字符型,避免被当作逻辑表达式解析,再传递给catx():
%let newtext=%sysfunc(catx(%str(, ), %sysfunc(putc(%str('grade>80'), $20.)), %str(test text))); %put &=newtext; %let newtext=%sysfunc(catx(%str(, ), %sysfunc(putc(%str('grade<80'), $20.)), %str(test text))); %put &=newtext;
该方法同样能得到你需要的原始文本输出。
内容的提问来源于stack exchange,提问作者whymath
相关产品推荐
相关产品推荐

