楼主: zkp216
5461 20

宏参数传递 [推广有奖]

  • 4关注
  • 2粉丝

已卖:30份资源

硕士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
246 个
通用积分
0
学术水平
1 点
热心指数
5 点
信用等级
1 点
经验
1857 点
帖子
103
精华
0
在线时间
159 小时
注册时间
2012-6-18
最后登录
2021-12-10

楼主
zkp216 发表于 2012-8-15 14:48:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  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);
  11. run;
复制代码
输出结果为:sn=.,而且提示name2未初始化,本来是想将zhang1以字符串传到宏Test内部,不知道错在哪里?请各位指教!
二维码

扫码加我 拉你入群

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

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

关键词:symput Macro strip name test zhang 字符串 null 而且

回帖推荐

chenys625 发表于6楼  查看完整内容

你那个macro编的不太合理,不知道你要达到什么目的? 以下这样是正确的程序(至少不报错): %macro Test(name); sn=&name; put sn=; %mend Test; data _null_; i=1; name1=strip('zhang')||strip(i); call symput('name2',name1);; %put out of macro is: &name2; %Test("&name2"); run;

本帖被以下文库推荐

沙发
zkp216 发表于 2012-8-15 15:14:22
试了一下,下面的可以,不知道什么规则,好像宏只能是常量?
%macro Test(name);
sn=&name;
put sn=;
%mend Test;

data _null_;
Tname='zhang1';
%Test(Tname);
run;

藤椅
Imasasor 发表于 2012-8-15 15:25:48
  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);
  11. run;
复制代码
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
stormhoof 发表于 2012-8-15 15:27:58
sn="&&&name"要改成这样。sn=&name只是把字符串&name赋值给sn,但&name不是有效的字符串。引用宏的话要双引号的,这样就能区别了。
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

报纸
zkp216 发表于 2012-8-15 15:28:22
哦,我知道了,谢谢各位!

地板
chenys625 发表于 2012-8-15 15:41:32
你那个macro编的不太合理,不知道你要达到什么目的? 以下这样是正确的程序(至少不报错):
    %macro Test(name);
    sn=&name;
    put sn=;
    %mend Test;
    data _null_;
    i=1;
    name1=strip('zhang')||strip(i);
    call symput('name2',name1);;
    %put out of macro is: &name2;
    %Test("&name2");
    run;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
zkp216 + 1 + 1 + 1 分析的有道理

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
stormhoof 发表于 2012-8-15 15:49:27
chenys625 发表于 2012-8-15 15:41
你那个macro编的不太合理,不知道你要达到什么目的? 以下这样是正确的程序(至少不报错):
    %macro T ...
这样写还是要双&的,sn=&&name

8
zkp216 发表于 2012-8-15 16:02:00
按照stormhoof和chenys625的最初写法效果都是一样的哦,但是按照后来stormhoof说的在%Test("&name2");上多加一个&,也没报错,有点晕了,什么时候加&,是加一个还是加两个呢?

9
stormhoof 发表于 2012-8-15 16:18:20
sorry,我说错了 我的那个要&&,chenys那个不需要了。&和&&几乎没什么区别。我那个&&&name是这样的,&name的值是name2,但是再次引用宏变量时必须是&&。也就是说&&name和&name都是一样的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zkp216 + 1 + 1 + 1 分析的有道理

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

10
zkp216 发表于 2012-8-15 16:25:26
stormhoof 发表于 2012-8-15 16:18
sorry,我说错了 我的那个要&&,chenys那个不需要了。&和&&几乎没什么区别。我那个&&&name是这样的,&name的 ...
这次是彻底明白了

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

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