Потребности выполнить оценку макропеременной вне datastep и в зависимости от наличия переменного, выполните вставку:Введенного значения Если макропеременная существует еще другое значение
data my_dataSet;
set ...
....
if %SYMEXIST(Variable_from_prior_code) = 1 then do;
dataset_variable = &Variable_from_prior_code.;
end;
else do;
dataset_variable = &Some_default_value_from_prior_code;
end;
Однако это терпит неудачу в компиляторе при попытке запустить его как «Явная символическая ссылка & Variable_from_prior_code». не было разрешено. То есть. компилятор проверяет содержимое оператора if, даже если это условие не выполняется.
я придумал глупую обходным: подойти к этому с противоположной directon, но чувствует себя глупее мешок барсуков:
if %SYMEXIST(Variable_from_prior_code) = 0 then do;
dataset_variable = &Some_default_value_from_prior_code
%let Variable_from_prior_code=0; /*Dummy value*/
end;
else do;
dataset_variable = &Variable_from_prior_code.;
end;
Любой способ ограничить компилятор от оценки содержания, что он не должен» т из-за состояния? Или, альтернативно, более элегантный обход, который не требует создания переменной?
Вы смешиваете макро логику (используется для генерации кода) и логику шага данных. Если вы поместите свой код в макрос, вы можете использовать% IF для условного генерации кода. – Tom