SAS宏加点与不加点
(2016-09-11 07:56:31)
标签:
sas宏 |
分类: 自编程序及心得体会 |
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,两个"."中,前面一个是引用结束的标志,被宏处理器消费掉了;后面一个是普通字符“小数点”。
2. 宏处理器并不十分挑剔这个“."。
例如:&abcde fgh 宏处理器会认为abcde是宏变量名;
%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;
也可以这么理解
&和.之间包括一个宏变量名称,在编译时原样替换成宏变量的值
如果宏变量后接的是如等号和空格等分隔符,则.可以省略,如%let sum=&a+&b,写成%let sum=&a.+&b.也对
但如果宏变量后接的是字母或数字,则.不可以省略
还有一种情况是宏变量名称中又有宏变量,如&&var&i,其中i=1,var1="bin",如果想得到"bingo",则需要用&&var&i..go,注意要加两个.
&和.之间包括一个宏变量名称,在编译时原样替换成宏变量的值
如果宏变量后接的是如等号和空格等分隔符,则.可以省略,如%let sum=&a+&b,写成%let sum=&a.+&b.也对
但如果宏变量后接的是字母或数字,则.不可以省略
还有一种情况是宏变量名称中又有宏变量,如&&var&i,其中i=1,var1="bin",如果想得到"bingo",则需要用&&var&i..go,注意要加两个.

加载中…