全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1549 4
2014-11-13
关于                                                                                                                                                [size=16.000000pt]Referencing Macro Variables Indirectly这块是死活弄不明白了。
[size=16.000000pt]例子如下:运行以下程序,不同个数的&,是怎么re-scan神马的得到下面结果的啊???真心是醉了!请问哪位大仙抽空给指点一下!!!
程序:
%let test=one;
%let one=two;
%let two=three;
%let three=four;
%let four=five;
%put 5:&&&&&test;
%put 6:&&&&&&test;
%put 7:&&&&&&&test;
%put 8:&&&&&&&&test;
%put 9:&&&&&&&&&test;
%put 10:&&&&&&&&&&test;

结果:

1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
42         ;
43         %let test=one;
44         %let one=two;
45         %let two=three;
46         %let three=four;
47         %let four=five;
48         %put 5:&&&&&test;
5:two
49         %put 6:&&&&&&test;
6:two
50         %put 7:&&&&&&&test;
7:three
51         %put 8:&&&&&&&&test;
8:one
52         %put 9:&&&&&&&&&test;
9:two
53         %put 10:&&&&&&&&&&test;
10:two
54         
55         ;
56         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
66         ;

                               
                       
               

二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-13 06:40:33
补充一下,用symbolgen option也晕晕乎乎不太懂
1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
SYMBOLGEN:  Macro variable _SASWSTEMP_ resolves to /folders/myfolders/.images/ab872ba3-2cff-4295-aa65-1f2c0ebb757c
SYMBOLGEN:  Some characters in the above value which were subject to macro quoting have been unquoted for printing.
SYMBOLGEN:  Macro variable _SASWSTEMP_ resolves to /folders/myfolders/.images/ab872ba3-2cff-4295-aa65-1f2c0ebb757c
SYMBOLGEN:  Some characters in the above value which were subject to macro quoting have been unquoted for printing.
SYMBOLGEN:  Macro variable GRAPHINIT resolves to  
42         ;
43         %let test=one;
44         %let one=two;
45         %let two=three;
46         %let three=four;
47         %let four=five;
48         %put 5:&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable ONE resolves to two
5:two
49         %put 6:&&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
SYMBOLGEN:  Macro variable ONE resolves to two
6:two
50         %put 7:&&&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable ONE resolves to two
SYMBOLGEN:  Macro variable TWO resolves to three
7:three
51         %put 8:&&&&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
8:one
52         %put 9:&&&&&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable ONE resolves to two
9:two
53         %put 10:&&&&&&&&&&test;
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable TEST resolves to one
SYMBOLGEN:  && resolves to &.
SYMBOLGEN:  Macro variable ONE resolves to two
10:two
54         
55         ;
56         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
SYMBOLGEN:  Macro variable GRAPHTERM resolves to  
66         ;
二维码

扫码加我 拉你入群

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

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

2014-11-13 09:06:48
SAS宏处理器在解析带有&的字符串时,大致的规则是这样的:
1. 顺序是从左到右;
2. 两个连续的&&,处理成单个&;
3. &后跟宏变量名字,那就解析出宏变量的值;
4. 回到第1步,直到解析结束。

例如:%put 7:&&&&&&&test;解析过程是:
7:&&&one
7:&two
7:three

二维码

扫码加我 拉你入群

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

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

2014-11-14 00:45:52
pobel 发表于 2014-11-13 09:06
SAS宏处理器在解析带有&的字符串时,大致的规则是这样的:
1. 顺序是从左到右;
2. 两个连续的&&,处理成 ...
哦,如果是这样,是不是可以理解为:
%put 8:&&&&&&&&test;解析过程是:
8:&&&&test
8:&&test
8:&test
8:one
%put 9:&&&&&&&&&test;解析过程是:
9:&&&&one;
9:&&one;
9:&one;
9:two;
%put 10:&&&&&&&&&&test;解析过程是:
10:&&&&&test;
10:&&one;
10:&one;
10:two;
%put 11:&&&&&&&&&&&test;
11:&&&&&one;
11:&&two;
11:  &two;
11:  three;
好像确实是对的啊!
茅塞顿开! 非常感谢!

二维码

扫码加我 拉你入群

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

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

2014-11-14 01:02:04
xuexi xuexi
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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