Sas 尝试创建一个宏,该宏检查宏变量是否存在,如果不存在则创建

Sas 尝试创建一个宏,该宏检查宏变量是否存在,如果不存在则创建,sas,sas-macro,Sas,Sas Macro,我想检查宏变量g900_r是否存在,如果不存在,则创建一个 谢谢, 山姆。你差点就拿到了。。。你遗漏了两件关键的事情。需要包含%global语句才能将宏声明为全局宏变量。这将使其在宏之外可用。您在%let语句中将其赋值为零时,也缺少了&项 您的最终代码应该是这样的: %Macro symexistchk(valuex); %if %symexist(&valuex) %then %put &valuex; %

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

谢谢,
山姆。

你差点就拿到了。。。你遗漏了两件关键的事情。需要包含%global语句才能将宏声明为全局宏变量。这将使其在宏之外可用。您在%let语句中将其赋值为零时,也缺少了&项

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

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

%symexistchk(g900_r);

你差一点就得到了。。。你遗漏了两件关键的事情。需要包含%global语句才能将宏声明为全局宏变量。这将使其在宏之外可用。您在%let语句中将其赋值为零时,也缺少了&项

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

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

%symexistchk(g900_r);

如果要将新创建的宏分配给具有%global的全局作用域,请在%let语句中解析宏变量参数,这样您就不仅仅是在具有&&&&的%put语句中创建名为valuex的变量


如果要将新创建的宏分配给具有%global的全局作用域,请在%let语句中解析宏变量参数,这样您就不仅仅是在具有&&&&的%put语句中创建名为valuex的变量

%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);