楼主: kittyforever
2345 8

[程序分享] SAS 宏变量的替换 [推广有奖]

  • 11关注
  • 2粉丝

已卖:938份资源

硕士生

65%

还不是VIP/贵宾

-

威望
0
论坛币
1990 个
通用积分
5.2275
学术水平
14 点
热心指数
11 点
信用等级
7 点
经验
7819 点
帖子
203
精华
0
在线时间
124 小时
注册时间
2009-11-14
最后登录
2022-8-8

楼主
kittyforever 发表于 2013-1-9 14:44:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
1    %let L1=L2;
2    %let L2=L3;
3    %let L3=L4;
4    %let L4=L5;
5
6    %put &L1;
结果:L2

7    %put &&L1;
结果:L2
过程:&&L1 -> &L1 -> L2

8    %put &&&L1;
结果:L3
过程:&&&L1 -> &L2 -> L3

9    %put &&&&L1;
结果:L2
过程:&&&&L1 -> &&L1 -> &L1 -> L2

10   %put &&&&&L1;
结果:L3
过程:&&&&&L1 -> &&L2 -> &L2 -> L3
二维码

扫码加我 拉你入群

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

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

关键词:put let

沙发
wangfengxi 发表于 2013-1-9 15:36:12
原来在这里

藤椅
tangliang0905 发表于 2013-1-10 01:38:21
feel a little bit lost

1    %let L1=L2;
2    %let L2=L3;
3    %let L3=L4;
4    %let L4=L5;
5
6    %put &L1;
结果:L2
easy to understand


7    %put &&L1;
结果:L2
过程:&&L1 -> &L1 -> L2

why is that? In my understanding, &&L1 ->&(&L1) ->&L2 ->L3, I know I am wrong, however, can't find where I am wrong.I will really appreciate if you could help me at the question.


8    %put &&&L1;
结果:L3
过程:&&&L1 -> &L2 -> L3

9    %put &&&&L1;
结果:L2
过程:&&&&L1 -> &&L1 -> &L1 -> L2

10   %put &&&&&L1;
结果:L3
过程:&&&&&L1 -> &&L2 -> &L2 -> L3

板凳
kittyforever 发表于 2013-1-10 09:15:15
tangliang0905 发表于 2013-1-10 01:38
feel a little bit lost

1    %let L1=L2;
当sas解析宏变量时, 遇到多个&符号, 每两个&视为一个&

报纸
tangliang0905 发表于 2013-1-10 09:37:07
SAS的macro真的是一种很麻烦的语言,哈哈,如果按照楼主所说的,如果两个连续的&视作一个&的话,有些例子能够明白,有些例子就很糊涂了,如果楼主有时间的话,麻烦再帮着说明一下好了。



1    %let L1=L2;
2    %let L2=L3;
3    %let L3=L4;
4    %let L4=L5;
5
6    %put &L1;
结果:L2
没错

7    %put &&L1;
结果:L2
过程:&&L1 -> &L1 -> L2
明白
8    %put &&&L1;
结果:L3
过程:&&&L1 -> &L2 -> L3
按照我的理解,&&&L1 -> (&&)&L1 ->&&L1 -> &L1 -> L2, 这个就貌似有问题了

9    %put &&&&L1;
结果:L2
过程:&&&&L1 -> &&L1 -> &L1 -> L2
&&&&L1 -> (&&)(&&)L1 -> &&L1 -> &L1 -> L2

10   %put &&&&&L1;
结果:L3
过程:&&&&&L1 -> &&L2 -> &L2 -> L3
&&&&&L1 -> (&&)(&&)&L1 -> (&&)&L1 -> &&L1 -> &L1 -> L2

不好意思,还望楼主指教一下


地板
kittyforever 发表于 2013-1-10 09:49:29
tangliang0905 发表于 2013-1-10 09:37
SAS的macro真的是一种很麻烦的语言,哈哈,如果按照楼主所说的,如果两个连续的&视作一个&的话,有些例子能 ...
以8为例
8    %put &&&L1;
结果:L3
过程:&&&L1 -> &L2 -> L3
按照我的理解,&&&L1 -> (&&)&L1 ->&&L1 -> &L1 -> L2, 这个就貌似有问题了

&&&L1 -> (&&)(&L1) ->&L2 -> L3
&&解析成&, &L1解析成L2, 合起来成为&L2, 最后解析为L3

7
tangliang0905 发表于 2013-1-10 10:07:29
也就是就近的两个&&,或者&Li都要转换


11   %put &&&&&&L1;
结果:L3
过程:&&&&&&L1 -> &&&L1 -> &L2 -> L3
&&&&&&L1 -> (&&)(&&)(&&)L1 -> &&&L1 -> (&&)(&L1)->&L2 -> L3
12   %put &&&&&&&L1;
结果:L4
过程:&&&&&&&L1 -> &&&L2 -> &L3 -> L4
&&&&&&&&L1 -> (&&)(&&)(&&)(&L1) -> &&&L2 -> (&&)(&L2) -> &L3 -> L4

13   %put &&&&&&&&L1;
结果:L2
过程:&&&&&&&&L1 -> &&&&L1 -> &&L1 -> &L1 -> L2
(&&&&&&&&)L1 -> (&&)(&&)(&&)(&&)L1 -> &&&&L1-> (&&)(&&)L1 -> &&L1 -> &L1 -> L2


14   %put &&&&&&&&&L1;
结果:L3
过程:&&&&&&&&&L1 -> &&&&L2 -> &&L2 -> &L2 -> L3
&&&&&&&&&L1 -> (&&)(&&)(&&)(&&)(&L1) -> (&&&&L2)-> &&L2 -> &L2-> L3


15   %put &&&&&&&&&&L1;
结果:L3
过程:&&&&&&&&&&L1 -> &&&&&L1 -> &&L2 -> &L2 -> L3
&&&&&&&&&&&L1 -> (&&)(&&)(&&)(&&)(&&)L1 -> &&&&&L1 -> &&L2 -> &L2 -> L3


这下完全明白了,十分感谢指点

8
冰雨狼 发表于 2013-1-10 10:09:37
楼上解释清晰明了

9
00810112 发表于 2013-1-10 11:02:44
我的理解:
先把&&配对,最后如果剩下单独L1和&L1两种情况
  &&&&&L1 ->(&&)(&&)L1
    &&&&&L1 ->(&&)(&&)(&L1)
然后解析,双&&变成&,单独出现的L1就不解析依然是L1,&L1出现就解析成L2
    (&&)(&&)L1      ->&&L1
    (&&)(&&)(&L1) -> &&L2
以此类推

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 05:00