将宏调用到另一个宏sas

时间:2018-02-08 21:04:14

标签: macros sas

我想将宏调用到另一个宏中,这会创建一个我想在另一个宏中使用的宏变量。但输出是"警告:未解析显式符号引用TEST33。"

data Base1;
input v1 v2 v3;
datalines;
1 7 8
;
run;

%let number = 6;
%Macro test1;    
proc sql noprint;
    select
    case when (
        case when &number eq 3 then v1
             when &number eq 6 then v2
             when &number eq 12 then v3
        end ) ge 6 then 1 else 0 end into: Test22 from _last_; quit;
%let Test33 = &Test22;
%Mend test1;

options mlogic mprint symbolgen;
%Macro test2;
%test1
%put &= &Test33;
%Mend;
%test2;

1 个答案:

答案 0 :(得分:0)

您的代码有两个错误,但不确定它们是否是真正的错误或错误的演示代码。

无论哪种方式:

  1. 如果要在宏之外使用它,则需要将宏中的变量声明为GLOBAL。宏变量具有范围,即本地或全局。
  2. 当您的演示数据名为BASE1时,您引用数据集 last
  3. 这对我来说很好用:

    data Base1;
    input v1 v2 v3;
    datalines;
    1 7 8
    ;
    run;
    
    %let number = 6;
    %Macro test1; 
    %global Test33; 
    proc sql noprint;
        select
        case when (
            case when &number eq 3 then v1
                 when &number eq 6 then v2
                 when &number eq 12 then v3
            end ) ge 6 then 1 else 0 end into: Test22 from base1; quit;
    %let Test33 = &Test22;
    %Mend test1;
    
    options mlogic mprint symbolgen;
    %Macro test2;
    %test1
    %put &= &Test33;
    %Mend;
    %test2;