楼主: zkp216
5454 20

宏参数传递 [推广有奖]

11
chenys625 发表于 2012-8-15 17:12:52
zkp216 发表于 2012-8-15 16:25
这次是彻底明白了
我对双“&&”有些迷惑了…… “&&”一定要加么? 加在哪里? 帖子没看明白……

12
zkp216 发表于 2012-8-15 17:23:05
chenys625 发表于 2012-8-15 17:12
我对双“&&”有些迷惑了…… “&&”一定要加么? 加在哪里? 帖子没看明白……
我记得好像在哪见过,如果是直接引用宏,像你写的程序,就不用加三个&,一个就可以了,如果是间接引用,像Stormhoof写的程序就要加三个&

13
hcydlee 发表于 2012-8-15 17:30:00
macro processor会把两个&作为一个&,但是会再解析一次。
比如:%let name=zhang1; %let zhang1=234;
那么 &name在宏变量表里面的值就是zhang1,
&&&name的值是234,
&&name的值就是zhang1。
&name的值也是zhang1。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zkp216 + 1 + 1 + 1 分析的有道理

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

80 字节以内
不支持自定义 Discuz! 代码

14
chenys625 发表于 2012-8-15 17:31:29
zkp216 发表于 2012-8-15 17:23
我记得好像在哪见过,如果是直接引用宏,像你写的程序,就不用加三个&, ...
兄弟能不能帮我把“&&”或者“&&&”的代码粘一下! 谢谢

15
zkp216 发表于 2012-8-15 17:45:39
  1. %macro Test(name);
  2.     sn="&&&name";/*间接引用*/
  3.     put sn=;
  4. %mend Test;
  5. data _null_;
  6. i=1;
  7. name1=strip('zhang')||strip(i);
  8. call symput('name2',name1);;
  9. %put out of macro is: &name2;
  10. %Test(name2);/*传送的是name2宏变量*/
  11. run;
复制代码

16
zkp216 发表于 2012-8-15 18:01:56
  1. %macro Test(name);
  2.     sn=&name;/*直接引用*/
  3.     put sn=;
  4. %mend Test;
  5. data _null_;
  6. i=1;
  7. name1=strip('zhang')||strip(i);
  8. call symput('name2',name1);;
  9. %put out of macro is: &name2;
  10. %Test("&name2");/*传送的是name1*/
  11. run;
复制代码

17
zkp216 发表于 2012-8-15 18:05:28
chenys625 发表于 2012-8-15 17:31
兄弟能不能帮我把“&&”或者“&&&”的代码粘一下! 谢谢
另外兄弟,纠正你一下,别叫我兄弟,我是兄弟后面的

18
chenys625 发表于 2012-8-15 20:14:15
zkp216 发表于 2012-8-15 18:05
另外兄弟,纠正你一下,别叫我兄弟,我是兄弟后面的
不好意思! 呵呵
你那个 /*简介引用*/的程序,只用一个&不行么? 我这用一个也行啊

19
zkp216 发表于 2012-8-15 21:03:57
chenys625 发表于 2012-8-15 20:14
不好意思! 呵呵
你那个 /*简介引用*/的程序,只用一个&不行么? 我这用一个也行啊
一个可以啊,不会报错,但是输出来的是name2,不是我想要的啊,我想让它输出zhang1,所以需要再加两个&再解析一下,像hcydlee和stormhoof解释的,加一个得话,&&name其实还是等同于&name,因此需要再加两个&

20
chenys625 发表于 2012-8-15 21:09:09
zkp216 发表于 2012-8-15 21:03
一个可以啊,不会报错,但是输出来的是name2,不是我想要的啊,我想让它输出zhang1,所以需要再加两个&再 ...
哦~ 明白了! 我也学习了 呵呵 谢谢!

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

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