宏变量使用特殊字符解析

问题描述 投票:0回答:2

我试图传递一个由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语句来运行程序。

macros sas
2个回答
0
投票

NRSTR是一个宏引用函数,它在代码输入流的SAS解释过程中解析为正常的标记化可能需要UNQUOTE

%STR and %NRSTR Functions

使用%STR和%NRSTR函数

如果特殊字符或助记符影响宏处理器构造宏程序语句的方式,则必须使用%STR或%NRSTR宏引用在宏编译期间(或在开放代码中编译宏程序语句期间)屏蔽该项。功能。

%UNQUOTE Function

在宏执行期间,取消屏蔽所有特殊字符和助记符运算符以获取值。


0
投票

我猜这个问题与目录的权限有关。查看目录权限以确保您具有访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.