Here is some SAS code to exercise various SAS behavior - again I refer to the SAS DOC reference, which mentions that the RUN statement location is critical to how resolution with SYMPUT in a DATA step behaves. Sorry I can't find the link again - please check the archives.
Scott Barry
SBBWorks, Inc.
data _null_;
call symput('a','I am global macro var a value');
run;
%put global macro vars - diag1: ;
%put _global_;
%macro x;
data _null_;
call symput('a','I am new macro var a value');
run;
%put local macro vars - diag2: ;
%put _local_;
%put local macro vars - diag3: ;
%put _global_;
%mend x;
%x;
%put global macro vars - diag4: ;
%put _global_;