SAS宏写入文本文件:字符转数值参数处理语法错误求助
解决SAS宏中PUT语句使用INPUT函数的语法错误
你的问题出在PUT语句里直接嵌入INPUT函数的写法不符合SAS语法规则。当宏变量&n_var解析成100后,原代码的PUT语句会变成:
put "(numeric variable passed = "input(100,8.)")";
SAS会把input(100,8.)当成字符串的一部分,而不是执行函数计算,这就导致了语法错误。
这里有两种简单的修复方案:
方案1:在DATA步中先创建数值变量再输出
先把宏变量转换为数值型变量,再在PUT语句中引用这个变量,逻辑更清晰:
%macro test(n_var); data _null_; file "c:/temp/test.txt" TERMSTR=crlf; /* 把宏变量转换为数值型变量 */ num_var = input(&n_var, 8.); put ; put "(numeric variable passed = " num_var ")"; put ; run; %mend; %test(n_var=100);
方案2:在PUT语句中用字符串连接符调用INPUT函数
如果你想直接在PUT语句里处理,可以用||字符串连接符,把INPUT函数的结果和前后字符串拼接起来:
%macro test(n_var); data _null_; file "c:/temp/test.txt" TERMSTR=crlf; put ; put "(numeric variable passed = " || input(&n_var,8.) || ")"; put ; run; %mend; %test(n_var=100);
另外补充一点:如果你的宏变量本身是合法的数值格式(比如这里的100),也可以用宏函数%SYSEVALF直接在宏层面完成转换,DATA步里直接用转换后的数值即可:
%macro test(n_var); data _null_; file "c:/temp/test.txt" TERMSTR=crlf; put ; put "(numeric variable passed = " %sysevalf(&n_var) ")"; put ; run; %mend; %test(n_var=100);
这几种写法都能解决你遇到的语法错误,你可以根据自己的代码习惯选择合适的方式。
内容的提问来源于stack exchange,提问作者spoonman
相关产品推荐
相关产品推荐

