加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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,两个"."中,前面一个是引用结束的标志,被宏处理器消费掉了;后面一个是普通字符“小数点”。
也可以这么理解
&和.之间包括一个宏变量名称,在编译时原样替换成宏变量的值
如果宏变量后接的是如等号和空格等分隔符,则.可以省略,如%let sum=&a+&b,写成%let sum=&a.+&b.也对
但如果宏变量后接的是字母或数字,则.不可以省略

还有一种情况是宏变量名称中又有宏变量,如&&var&i,其中i=1,var1="bin",如果想得到"bingo",则需要用&&var&i..go,注意要加两个.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有