Ho sempre pensato che %let
crea una variabile local
se utilizzato all'interno di %macro . . . %mend
perché% non consente di creare una variabile macro locale?
Ma quando si esegue questo codice, il registro SAS mostra GLOBAL TESTVAR value1
%let testVar = value2;
%macro test;
%let testVar = value1;
%mend;
%test
%put _all_;
Quindi, non riesco a capire il motivo per cui il valore di la variabile globale testVar
è stata modificata in value1
. Mi aspettavo che fosse invariato value2
. L'istruzione %let
all'interno di %macro
dovrebbe avere avuto un impatto SOLO sulla tabella dei simboli locale.
Quando il processore macro esegue un'istruzione programma macro che può creare una variabile macro, il processore macro crea la variabile nella tabella dei simboli locale se nessuna variabile macro con lo stesso nome è a disposizione di it
Grazie, ho capito ora. Sono stato confuso con l'esempio SAS: '% let new = inventry; % macro nome2; % let new = report; . . ' – Alex
@Alex Dovresti sempre dichiarare esplicitamente le variabili nelle macro come locali (se ti aspetti che siano locali). Non riuscendo a farlo può portare a qualche difficile codice di debug se la tua macro capita di chiamare altre macro (o viene chiamata da un'altra macro). –