SAS在数据步骤中定义宏

时间:2018-02-09 15:05:45

标签: sas

我有一些遗留SAS代码,用于在数据步骤中定义宏。这是如何运作的?是否为DATA步骤的每次迭代编译宏?

    data test;
    set temp;
    %macro cal_sum(iput);
    %let a=&input.;
    %mend;
    REPORTING_DATE = &PROCDATE.;
    call execute('%cal_sum(testval)');
    run;

2 个答案:

答案 0 :(得分:1)

没有。在这种情况下,宏在数据步骤执行之前被编译。对于数据步骤的每次迭代,只有三种方法可以运行/编译宏:

  1. dosubl()
  2. run_macro来电中
  3. fcmp
  4. call execute - 但请注意,任何生成的SAS代码都会在数据步骤之后执行。
  5. 它的工作方式是:

    data test; set temp;被发送到堆栈,准备在下一步边界执行

    编译

    %macro cal_sum(iput);%mend;宏(未执行)

    REPORTING_DATE = &PROCDATE.;run;被发送到堆栈并执行(因为run;语句是一个步骤边界)

答案 1 :(得分:1)

宏代码(在本例中为宏定义)在SAS执行程序编译和运行数据步骤之前完全解析。

所以不,不会为DATA步骤的每次迭代编译宏。

另外,正如您所知,每次迭代都不会调用在数据步骤内编码的宏调用,但是,无论宏调用发出的源代码是什么。