1

我正在寻找一种方法来解决已定义的 SAS MACRO 的参数。我知道在哪里可以找到会话定义的宏(WORK.SASMACR/WORK.SASMAC1),但现在我想知道更进一步并确定它的参数。例如:

%macro test(val1, val2);
   %put &val1 &val2;
%mend test;


/* With proc catalog I can find the defined macro... */
proc catalog cat=work.SASMAC1;
   contents out=macros;
run;

/* How to create function/macro which takes the macro name and returns its arguments, eg:*/
%resolveMacroParams(test);
/* ...returns: */
val1 val2

任何帮助将不胜感激!

亲切的问候,赫尔曼

4

2 回答 2

2

如果宏是使用 SOURCE 选项编译的,则可以执行此操作。以下为您提供了一个包含宏文本的数据集,您可以从中轻松获取参数:

libname dummy 'c:\temp\';
options mstored sasmstore=dummy;
%macro test(val1, val2)/store source;
   %put &val1 &val2;
%mend test;
filename mymacr temp;
%copy TEST/lib=dummy source out=mymacr;

data test;
infile mymacr truncover;
input @1 line $100.;
run;
于 2013-10-25T14:03:03.517 回答
1

您想要在最后一次调用时将值作为参数提供给函数吗?

宏的定义不存储它的值。宏参数在该宏的本地范围内,它们的值不在宏结束后的任何地方。

在执行期间,您可以在 dictionary.macros 中找到它:

因此,要保留它,您必须像这样更改宏:

%macro test(val1, val2);
proc sql;
create table TEST_VALS as 
select * from dictionary.macros
where scope='TEST'
;
quit;
%mend test;

%test(11, 22);

或将这些值放入一些全局宏变量中。

于 2013-10-25T13:40:32.430 回答