【问题标题】:SAS macro variable containing two macro variables is not resolved包含两个宏变量的 SAS 宏变量未解析
【发布时间】:2019-08-08 16:44:51
【问题描述】:

我有两个宏变量,路径和文件,它们都包含特殊字符。我对两者都使用 %str 。然后将它们组合为另一个宏变量,直接。

当我在文件名管道语句中使用 &direct 时,它没有被解析。

谁能告诉我这是怎么回事?

我尝试过双引号或 %sysfunc(cats())。也不行。

代码为:

%let path=%str(B:\Enrollment Report\Fall 18\18F Enroll- MASTER\);
%let file=%str(18F Enroll as *.xlsx);
%let direct=%sysfunc(cats(&path, &file));

%put &direct;

filename dirlist pipe 'dir "&direct" /b';



NOTE: The infile DIRLIST is:
      Unnamed Pipe Access Device,
      PROCESS=dir "&direct" /b,RECFM=V,LRECL=200

【问题讨论】:

  • 宏触发器 & 和 % 不会在外部使用单引号的字符串内部进行评估。

标签: sas sas-macro


【解决方案1】:

宏触发器不会在单引号内解析。一种简单的方法是使用双引号字符,记住将任何嵌入的双引号字符加倍。

请注意,在宏代码中无需使用 CATS()。或者将 %STR() 宏引用添加到不需要引用的值。

%let path=B:\Enrollment Report\Fall 18\18F Enroll- MASTER;
%let file=18F Enroll as *.xlsx;
%let direct=&path\&file;
filename dirlist pipe "dir ""&direct"" /b";

【讨论】:

  • 汤姆,非常感谢!代码有效!我从你的回答中学到了三件事。赞赏。
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多