【问题标题】:How to use a macro parameter to call another macro in SAS如何使用宏参数调用SAS中的另一个宏
【发布时间】:2015-02-27 06:17:24
【问题描述】:

我发现我的很多宏观工作都有类似的结构。为了使我的代码更整洁,我想制作一个通用宏,其中有三个输入,即我运行作业的第一个日期。运行它的日期数,以及我想为这些日期执行的宏的名称

下面是我的代码,如果我在 run_dates 宏中对宏进行硬编码,它就可以工作,但我不能使用作为参数传递的宏变量来调用它。 如何使用作为参数传递的宏变量来调用另一个宏?

我已将 cmets 添加到它不起作用的代码中。我已经简化了输出,因此它们看起来并不有趣或不合逻辑,但我正在寻找的只是能够使用该宏变量。

%macro test_macro(dt);
%put macro date is &dt;
%mend test_macro;



%macro run_dates(dt_start, num, macro_name);

%put &macro_name;

%do i =0 %to &num ; 

    data _null_;
        call symput('querydate',"'" || put(intnx('month',&dt_start.d ,&i,'e'),date9.) || "'");
    run;

    %put prepaid daily for &querydate;

    /*this is where I want to call the macro*/
    %&macro_name(&querydate);

%end;

%mend run_dates;

/*now run the main macro*/
%run_dates('03jun2012', 10,'test_macro');

【问题讨论】:

  • 几乎是对的,只要在调用%rundates('03Jun2012', 10, test_macro)时去掉宏名中的引号即可。您目前要求 SAS 调用 %'test_macro',因为宏小玩意都是字符串,并且引号会被传递。

标签: variables macros sas


【解决方案1】:

只需从 macro_name 中删除引号

%run_dates('03jun2012', 10,test_macro);

【讨论】:

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