我试图传递一个由Call symputx创建的具有特殊字符(下划线)的宏变量,但是不能成功,这是我编写的代码。
data _null_;
call symputx('name', scan( "&table" ,2,'.')); run;
%let location= E:\drives\Monthly;
Proc export data=file
outfile= "&location.\&name..txt" dbms=dlm replace;
run;
当NAME宏变量没有特殊字符时,代码执行完美,但它显示验证失败或无法解决宏或任何其他错误。
我想失去掩盖特殊的字符,我怎么在这里继续?
所以这里有详细信息:(来自@Richard评论)
%let location=%nrstr(E:\Reports\Monthly\Updates (NEW)_UPPDATE_LIST);
%let Name = %nrstr(Table_20);
Proc export dbms=dlm
data=Newfile
replace
outfile= "&location=.\&Name..txt" ;
run;
当我在表名中有下划线时,它会给出此错误
ERROR: Insufficient authorization to access
E:\Reports\Monthly\Updates (NEW)_UPPDATE_LIST
我将不得不添加一件事是我使用%include语句来运行程序。
NRSTR
是一个宏引用函数,它在代码输入流的SAS解释过程中解析为正常的标记化可能需要UNQUOTE
使用%STR和%NRSTR函数
如果特殊字符或助记符影响宏处理器构造宏程序语句的方式,则必须使用%STR或%NRSTR宏引用在宏编译期间(或在开放代码中编译宏程序语句期间)屏蔽该项。功能。
和
在宏执行期间,取消屏蔽所有特殊字符和助记符运算符以获取值。
我猜这个问题与目录的权限有关。查看目录权限以确保您具有访问权限。