尝试创建一个检查宏变量存在的宏,如果不存在则创建它

时间:2015-01-30 21:06:10

标签: sas sas-macro

%Macro symexistchk(valuex);
                %if %symexist(&valuex) %then %put &valuex;
                    %else %do; %let valuex = 0;
                            %end;
%Mend symexistchk;

%symexistchk(g900_r);

我想检查宏变量g900_r是否存在,如果它不存在则创建一个。

谢谢, 萨姆。

2 个答案:

答案 0 :(得分:4)

你几乎拥有它......你失踪了两件关键的事情。您需要包含%global语句以将宏声明为全局宏变量。这将使其在宏之外可用。你也错过了%let语句中的&,你将它分配给零。

您的最终代码应该是这样的:

%Macro symexistchk(valuex);

  %if %symexist(&valuex) %then %do;
    %put Macro Variable &valuex exists.;
  %end;
  %else %do; 
    %global &valuex;
    %let &valuex = 0;  * NOTE THE AMPERSAND TO THE LEFT OF THE EQUALS SIGN;
    %put Macro Variable &valuex created and initialized to zero.;
  %end;
%Mend symexistchk;

%symexistchk(g900_r);
%put &g900_r;

答案 1 :(得分:1)

您需要使用%global将新创建的宏分配给全局范围,在%let语句中解析您的宏变量参数(这样您不只是创建一个名为valuex的变量)和{ {3}} %put语句&&&。{/}

%macro symexistchk(valuex);
    %if %symexist(&valuex.) %then %put Already exists: &valuex = &&&valuex;
    %else %do;
        /* Make macro variable available outside macro */
        %global &valuex.;
        %let &valuex. = 0;
        %put Assigning: &valuex = &&&valuex;
    %end;
%mend symexistchk;
%symexistchk(mVar);
%symexistchk(mVar);