解决SAS MACRO参数

时间:2013-10-25 12:37:26

标签: macros sas

我正在寻找一种方法来解决已定义的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

非常感谢任何帮助!

亲切的问候, 赫尔曼

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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);

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