全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2588 3
2007-01-29

%let new=inventry;
%macro name1;
%let new=report;
%mend name1;
%name1
这个时候new=report!!!!

我理解的是第一个语句在Global Symbol中产生有一个new

再定义Macro name1的时候在Local Symbol中又产生一个new。

但是程序执行的结果是改变Global Symbol中的new='report',而在Local Symbol中不生成新的宏变量

高手解释一下。可能是我理解宏的运行过程不够准确!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2007-1-29 22:33:00

第一步:sas在内存生成一个内存段叫new的;

第二步:定义local var new,因为原来内存里有一个叫new的内存段,所以sas不会重新开辟一个内存储存local 的new,而是直接把local所定义的值覆盖掉原来的值。

第三步:global的值被改变了!!!

这个程序就告诉我们一个道理,sas的内存定义有点怪,变量(包括所有种类的变量)要小心命名。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-3-8 10:38:00
Answer:
When assign a value to macro variable, e.g "new", the steps are blow:
1. search the "new" in local symbol table. If exist, assign it.
2. if local symbol table has no "new", search the "new" in global symbol table.
If exist, assign it.
3. if global symbol table has no "new", create local macro variable "new" and assign it.

So, please try the code below, which should be what you want:
%let new=inventry;
%macro name1;
%local new;
%let new=report;
%mend name1;
%name1
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2007-3-11 16:25:00
有道理!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群