新浪博客

SAS宏加点与不加点

2016-09-11 07:56阅读:
MACRO加'.”和不加'.”是没有什么区别的,在引用宏变量时正规的写法是:'&”+宏变量名+”.“。但是在有些情况下是必须要加的,有些情况下不是必须加的。必须加的时候一般是在宏变量后面有'.'时,比如:你想表达2.2,让你设宏变量%let a=2,这时在引用宏变量时前一个宏变量是必须要加点的,后一个就不是必须的,所以2.2用宏变量表达是:&a..&a. 或&a..&a。
1. 引用宏变量时,后面的'.'是宏变量名字结束的标志。
也就是,&符号和“.”之间的部分是宏变量的名字。
注意这个点必须要紧跟在宏变量的后面,才能起到这个“标志”的作用。
2. 宏处理器并不十分挑剔这个“.'。
当没有”.'的时候,宏处理器会从&符号开始,一直找到那个不能作为宏变量名字的字符为止(比如:空格,-,(,),> 等等), 把&符号和这个字符之间的那部分作为宏变量的名字。
例如:&abcde fgh 宏处理器会认为abcde是宏变量名;
&abc-de fgh 宏处理器会认为 abc是宏变量名;
&a .bcdefg 宏处理器会认为a是宏变量名,后面的部分,包括'.'都会作为普通字符。
& a
. bcdef 由于&符号后面的字符不能作为变量名字的一部分,宏处理器不会尝试读取任何宏变量的值。
%let a=aaaaa;
%let abcde=aabbccddee;
%let abc=aaabbbccc;
%put &abcde fghi;
%put &abc-def;
%put &a .bcdef;
%put & a .bcdef;
3. 当需要明确告诉宏处理器&符号引用到什么位置,就需要用到'.'了。%let a=aaa;
%put &a.bbbccc;
楼上的2.2的例子也很好,&a..&a,两个'.'中,前面一个是引用结束的标志,被宏处理器消费掉了;后面一个是普通字符“小数点”。
也可以这么理解
&和.之间包括一个宏变量名称,在编译时原样替换成宏变量的值
如果宏变量后接的是如等号和空格等分隔符,则.可以省略,如%let sum=&a+&b,写成%let sum=&a.+&b.也对
但如果宏变量后接的是字母或数字,则.不可以省略
还有一种情况是宏变量名称中又有宏变量,如&&var&i,其中i=1,var1='bin',如果想得到'bingo',则需要用&&var&i..go,注意要加两个.


我的更多文章

下载客户端阅读体验更佳

APP专享