SAS 使用双 & 符号宏变量定义 %LET 宏变量



我正在尝试使用 %LET 语句创建一个局部宏变量,其值是一个宏变量,需要多个 & 符号才能解析。 SAS 在分配局部宏变量的名称之前不会解析多个 & 符号。

%macro example;
%do i=1 %to %sysevalf(&max_n);
    %let dg= &&max_&i..;
    {stuff happens here}
%end;
%mend;
%example;

例如,&max_1. 解析为我在代码的 {stuff 发生在这里} 部分中使用的 APPLE。 但是,SAS 给了我警告"警告:明显的象征性引用MAX_未解决。"DG 宏变量通过 &&max_1 返回 &&max_17。呼叫 &DG。此时将返回 &&max_1 它将自行解析为 APPLE,但这不适用于我没有显示的代码中的语法。

知道如何制作宏变量以便 &DG. 返回 APPLE?

(我知道这不是答案,但我无法在评论中发布格式化的代码。之后我会编辑/删除这篇文章)。

您在此处发布的代码不是您的罪魁祸首。如果我按原样,请在前面初始化几个变量,并在stuff happens的地方放置一个%put语句:

%let max_1=APPLE;
%let max_n=1;
%macro example;
%do i=1 %to %sysevalf(&max_n);
    %let dg= &&max_&i..;
    %put &dg;
%end;
%mend;
%example;

您可以复制/粘贴它并运行它,它会按预期将"APPLE"打印到您的日志中。

您尝试做的事情一定还有更多导致您的问题的原因。

此外,宏变量在调用宏的宏执行时间之前不会解析(或不需要存在于父范围或当前作用域中)。 因此,max_1和max_n的分配可以在宏定义之后和 %example 之前进行。

您遇到的行为可能是由于在宏调用之前对变量应用了宏引用。 您可以在被调用方作用域的宏中使用 %unquote,也可以在调用方作用域的宏分辨率上使用 %unquote,或者确定如何处理概念和输入,减少引用量。

注意:数字索引宏变量有时称为"宏数组"。 以符号为后缀的宏变量有时称为"宏关联数组"或"宏对象"

最新更新