Macros 解析SAS宏参数

Macros 解析SAS宏参数,macros,sas,Macros,Sas,我正在寻找一种方法来解析已定义SAS宏的参数。我知道在哪里可以找到会话定义的宏(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; con

我正在寻找一种方法来解析已定义SAS宏的参数。我知道在哪里可以找到会话定义的宏(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
任何帮助都将不胜感激

亲切问候,,
Herman

您希望在函数最后一次调用时将类似值作为参数提供给函数吗

宏的定义不存储其值。宏参数位于该宏的本地范围内,其值不在宏结束后的任何位置

在执行过程中,您可以在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);

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

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

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;