如何在另一个宏中使用从宏变量返回的值

How do I use a value that is returned from a Macro Variable in another macro

我已经简化了很多所以可以重复

%macro macro_one(dt2);
  %let var1 = &dt2;
%mend;

然后我有另一个宏,我想在宏 2 中使用宏 1 的输出

%macro macro_print(dt2);
  /*call macro 1*/
  %macro_one(&dt2);
  %put &var1;
%mend;

/调用宏/

%macro_print('purple');

它应该在日志中打印紫色,但我收到错误 但是我收到一个错误 - 我怀疑我需要在调用宏二时从宏一分配宏变量。

首先,我怀疑您的代码与此处有错别字。定义宏的正确方法是:

%macro blah(x);
<do stuff>
%mend;

不是:

%macro_blah(x);
<do stuff>
%mend;

宏在 %macro_one 中创建,默认为本地范围。您可以通过声明 %global.

来解决此问题
%macro macro_one(dt2);
   %global var1;
   %let var1=&dt2;
%mend;

此外,在 %macro_two 中使用 %put 而不是 put