Я использую% SYMEXIST, чтобы проверить, существует ли макропеременная, а затем продолжить или пропустить по результату. Это звучит так просто, но SAS бросает ошибки для всех подходов, которые я пробовал до сих пор.Ошибка ведущего пространства при использовании% SYMEXIST
& num_tables - это макрос, созданный из набора данных, основанный на определенных условиях.
proc sql noprint;
select distinct data_name into :num_tables separated by ' '
from TP_data
where trim(upcase(Data_Name)) in
(select distinct(trim(upcase(Data_Name))) from Check_table
where COALESCE(Num_Attri_DR,0)-COALESCE(Num_Attri_Data,0) = 0
and Name_Missing_Column eq ' ' and Var_Name eq ' ');
quit;
Если этот макрос вар не будет решена или не создана (ни одна строка не выбрана из набора данных), я хотел бы пропустить. Когда я,
%if %symexist(num_tables) %then %do;
SAS выдает ошибку с сообщением «MACRO имя переменной X должно начинаться с буквы или символа подчеркивания». Поэтому я попытался удалить ведущие пространства, используя все следующие подходы:
%let num_tables = &num_tables; /* approach 1 */
%let num_tables = %sysfunc(trim(&num_tables)) /* approach 2 */
%let num_tables = %trim(&num_tables) /* approach 3 */
Но ни один из них не работал. Я все еще получаю сообщение об ошибке «Значение переменной MACRO X должно начинаться с буквы или подчеркивания»
Где «X» пришел из "? Вы делаете на самом деле'%, если% symexist (& num_tables) 'возможно? – Joe
я забыл заменить X с num_tables, просто хотел, чтобы сделать его универсальным. Кроме того, я я не использовал & перед num_tables.Так что мой код был% if% symexist (num_tables)% then% do; – rom
Это не согласуется с той ошибкой, которую вы даете, хотя '% if% symexist (num_tables)' является юридическим синтаксисом в любом сеансе SAS. Ничто из того, что вы делаете в «подходах», имеет смысл с этим - все они изменяют содержимое num_tables, а не само имя. – Joe