2013-10-25 50 views
1

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

%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

你要像提供数值作为参数传递给函数在其最后一次通话?

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

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

或将这些值转换成一些全局宏变量。

1

如果使用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;