【问题标题】:Macro variable resolving with special Characters用特殊字符解析宏变量
【发布时间】:2018-09-14 13:49:11
【问题描述】:

我正在尝试传递由 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 语句来运行程序。

【问题讨论】:

  • 名字可以有什么特殊字符
  • 只有下划线
  • 我试过 %let table =new._one;它对我有用
  • &NAME 中唯一会给 SAS 带来麻烦的特殊字符是 ",因为这会导致生成无效的 SAS 语法。可能有其他字符不是 SAS 特殊的,但在您的操作系统上作为文件名的一部分是无效的。喜欢:。什么角色给你带来了问题?
  • 显示实际输入数据。显示 SAS 日志中的实际行以及 SAS 生成的错误。

标签: macros sas


【解决方案1】:

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

%STR and %NRSTR Functions

使用 %STR 和 %NRSTR 函数

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

%UNQUOTE Function

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多