Попытка создать макрос, который проверяет существование макропеременной и создает ее, если она не существует
%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);