Попытка создать макрос, который проверяет существование макропеременной и создает ее, если она не существует

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

%symexistchk(g900_r);

Я хочу проверить, существует ли макропеременная g900_r, и создать ее, если она не существует.

Спасибо, Сэм.

2 ответа

Решение

У тебя почти было это... Были 2 ключевые вещи, которые ты упустил. Вам нужно включить оператор%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;

Вы захотите назначить вновь созданный макрос глобальной области с помощью %globalразрешите аргумент вашей макропеременной в %let оператор (так что вы не просто создаете переменную с именем valuex) и оцените разрешенную макропеременную в вашем %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);
Другие вопросы по тегам