楼主: lyx2014
3788 6

如何利用宏进行宏变量的替换,急!!!求教 [推广有奖]

  • 0关注
  • 0粉丝

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
23 点
帖子
2
精华
0
在线时间
8 小时
注册时间
2014-7-21
最后登录
2014-9-8

楼主
lyx2014 发表于 2014-8-14 15:00:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. %macro hi(t);
  2. data a;
  3. set a;
  4. call symputx('eee',9+&t);
  5. run;
  6. %mend hi;
  7. data a;
  8. input x;
  9. cards;
  10. 5
  11. 8
  12. 7
  13. 1
  14. ;
  15. run;
  16. data a;
  17. set a;
  18. if x=5 then call symputx('eee',x);
  19. run;
  20. data b;
  21. set a;
  22. if x=7 then do;
  23. call symputx('gg',_n_);
  24. call execute("%hi(t);");
  25. x=&eee;
  26. end;
  27. run;
复制代码
求大神指点,为什么数据集b里面的x=7没有被替换成x=12,为什么在宏hi里面没有改变宏变量eee的值,求教!!!

二维码

扫码加我 拉你入群

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

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

关键词:EXECUTE symput Input Macro cards 如何利用宏进行宏变量的替换

沙发
苹果叶 在职认证  发表于 2014-8-14 20:04:53
看不懂套来套去想干嘛,但是call execute("%hi(t);"); 这句话连 t 都没定义,怎么跑得出结果呢

藤椅
苹果叶 在职认证  发表于 2014-8-14 20:05:50
xxxxxxxxxxxxxxxxxxxxxxx 重复,删掉

板凳
jingju11 发表于 2014-8-14 20:10:59
看不懂套来套去想干嘛...
同意。即使语法正确,SAS程序也不应该这么写。更何况概念也模糊。京剧

报纸
lyx2014 发表于 2014-8-14 20:21:15
  1. %macro hi(t);
  2. %put &t;
  3. data a;
  4. set a;
  5. call symputx('rrr',10+&t);
  6. run;
  7. %let rr=&rrr;
  8. %mend hi;

  9. data a;
  10. input x;
  11. cards;
  12. 5
  13. 8
  14. 7
  15. 1
  16. ;
  17. run;

  18. data b;
  19. set a;
  20. call symputx("gg",_n_);
  21. select;
  22. when(x=8) do;
  23. %let rr=1;
  24. call execute("%hi(&gg);");
  25. x=&rr;
  26. end;
  27. when(x=7) do;
  28. %let rr=1;
  29. call execute("%hi(&gg);");
  30. x=&rr;
  31. end;
  32. otherwise x=2;
  33. end;
  34. run;
复制代码


抱歉,我是新手,不太懂sas,还请各位高手指教。
我想做的是,在同一个data步中,宏变量gg的值随着_N_的变化而变化,然后将gg放进宏hi中改变宏变量rr的值,最后继续原来的data步。

地板
pobel 在职认证  发表于 2014-8-14 20:38:15
lyx2014 发表于 2014-8-14 20:21
抱歉,我是新手,不太懂sas,还请各位高手指教。
我想做的是,在同一个data步中,宏变量gg的值随着_N_ ...
1. 宏hi实现的其实只是10+t,没有必要用宏;
2. 楼主可以直接使用_n_,没有必要使用宏变量gg;

楼主要实现的应该只是:

data b;
set a;
   if x in (7,8) then x=10+_n_;
   else x=2;
run;
和谐拯救危机

7
mingfeng07 学生认证  发表于 2014-8-15 09:31:16
你要明白CALL execute的用法,它是在一个data步运行完之后才会自动运行,也就是说,在这个data步中,它是不能改变任何变量的值的,你可以在最后一个语句之后加上:
%put &eee;
这样才能得到12的结果(前提是你的宏得改成"%hi(&gg)")。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 11:48