sas_user 发表于 2011-5-10 23:16 
学习了。谢谢。不好意思,没讲清楚。之所以用symput 是相对于data step而言。个人理解symput的本意是当我们需要先执行data step,得出值来以后再赋给宏变量的时候,symput就可以达到这个目的。而通常宏变量的赋值是先于data step 的。比如下面, 第一个程序中z就被解析成x*y, 而第而个程序中z就被解析成12.
data a;
x=3;
y=4;
%let z=x*y;
run;
data a;
x=3;
y=4;
call symput('z',x*y);
run;
第一个程序中z被解析为x*y是当然的,因为x和y之前定义的都是变量而不是宏变量,而且你定义z的时候没有引用。如果你把x,y转化成宏变量的话,再写%let z=%eval(&x * &y),z就被解析成12了。
至于谁先谁后我还真不知道,因为即使你把%let那句话拿出整个data步,z还是解析成x*y而不是其他。
期待高手来回答。