【问题标题】:Resolving SAS MACRO parameters解析 SAS MACRO 参数
【发布时间】:2013-10-25 12:37:25
【问题描述】:

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

任何帮助将不胜感激!

亲切的问候, 赫尔曼

【问题讨论】:

    标签: macros sas


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        相关资源
        最近更新 更多