我正在寻找一种方法来解决已定义的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
非常感谢任何帮助!
亲切的问候, 赫尔曼
答案 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);
或将这些值放入一些全局宏变量中。