variables - 解析宏变量名称中包含 %eval 的宏,SAS

标签 variables macros sas eval

这是一个玩具示例,目的是帮助解决我遇到的一个更大的问题。它本质上涉及在引用更大的宏变量名称时使用 %eval() 宏。

我已经创建了一个宏变量 x_2,它使用循环的值,'&it',从最终输出中可以看出变量已成功创建,但是我只能将其写入日志而不评估 &it+ 1,当使用大于 1 的循环时我需要这样做。

它似乎先解析 x_,发出警告,然后再对 x_2 作为一个整体进行评估并给出输出。

我意识到这只是一个关于如何正确引用宏的问题,但我找不到任何使用评估作为宏变量名称一部分的示例。

谢谢。

%macro testing;

%DO it = 1 %TO 1; 

data dataset;
    s=100;
    t=99;
run;

data _null_;
    set dataset;
    if s = 100 then do;
        call symput("x_%eval(&it+1)",t);
    end;
run;

%put "&x_%eval(&it+1)";

%put &x_2;

%END;

%mend testing;

%testing;

日志输出

MLOGIC(TESTING):  %PUT "&x_%eval(&it+1)"

WARNING: Apparent symbolic reference X_ not resolved.

SYMBOLGEN:  Macro variable IT resolves to 1

SYMBOLGEN:  Macro variable X_2 resolves to           99

"          99"

MLOGIC(TESTING):  %PUT &x_2

SYMBOLGEN:  Macro variable X_2 resolves to           99

99

MLOGIC(TESTING):  %DO loop index variable IT is now 2; loop will not iterate again.

MLOGIC(TESTING):  Ending execution.

最佳答案

确实,SAS 在调用 %eval 函数之前进行了变量替换 最简单的解决方案是在较早的语句中调用 %eval

%let xNr = %eval(&it+1);
%put "&&x_&xNr";

双符号用于延迟 x_&xNr 的计算,直到 &xNr 被计算为 2 并且没有警告 x_ 未定义。

SYMBOLGEN:  Macro variable IT resolves to 1
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable XNR resolves to 2
SYMBOLGEN:  Macro variable X_2 resolves to           99
"          99"

关于variables - 解析宏变量名称中包含 %eval 的宏,SAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34064369/

相关文章:

c++ - 用宏确定GCC编译器

SAS:插入空白行

loops - SAS中嵌套道循环的解释

php - 捕获选中的复选框并将它们转换为 php 中的变量

python - 执行 GUI onclick 命令时,将变量值从一个模块返回到另一个模块时出现问题

c# - 抱歉,我们找不到 Test.xlsm。是否有可能被移动、重命名或删除?

excel - 用于从元数据中列出所有 SAS 服务器用户的 SAS 脚本

python - 使用函数从 python 环境中删除所有变量/对象

ios - Swift:如何将函数类型值设置为可选变量?

多次调用 C 预处理器宏(通过变量)