Die Notwendigkeit Bewertung eines Makrovariablen außerhalb datastep auszuführen ist und in Abhängigkeit von der Existenz der Variablen, führen Einfügen:Eingangswert Wenn Makrovariable existiert sonst einen anderen Wert
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;
Dies ist jedoch bei Compiler schlägt fehl wenn versucht wird, es als "Scheinbare symbolische Referenz & Variable_from_prior_code" auszuführen. wurde nicht gelöst. Ie. Der Compiler überprüft den Inhalt der if-Anweisung, auch wenn die Bedingung nicht erfüllt ist.
kam ich mit dummer Behelfslösung up: dieses von entgegengesetzter directon zu nähern, fühle mich aber dümmer als Tasche von Dachsen:
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;
irgendeine Weise der Compiler aus der Auswertung Inhalt zu beschränken, die es shouldn‘ t aufgrund der Verfassung? Oder alternativ, elegantere Work-around, die keine Erstellung der Variablen erfordern?
Sie vermischen Makrologik (verwendet, um Code zu generieren) und Datenschrittlogik. Wenn Sie Ihren Code in ein Makro einfügen, können Sie% IF verwenden, um den Code bedingt zu generieren. – Tom