楼主: superyxo
2058 5

[问答] 为什么这个Macro里的循环只有第一次循环的call symput起作用? [推广有奖]

  • 2关注
  • 1粉丝

硕士生

64%

还不是VIP/贵宾

-

威望
0
论坛币
91 个
通用积分
1.0005
学术水平
7 点
热心指数
2 点
信用等级
2 点
经验
9870 点
帖子
93
精华
0
在线时间
199 小时
注册时间
2007-8-28
最后登录
2021-4-15

楼主
superyxo 发表于 2013-9-16 11:20:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位,我写了一个macro,里边是一个循环,但是跑下来发现只有第一次循环里的call symput产生了宏变量,接下来的循环都没有产生宏变量,这是为什么呢?
  1. %macro years();
  2. %do i=1 %to &tot;
  3.         proc sort data=&&var&i;by facilitystartdate;run;
  4.         data _null_;
  5.         set &&var&i end=eof;
  6.         if _n_=1 then call symput("min_"||"&&var&i",put(facilitystartdate,date9.));
  7.         if eof then call symput("max_"||"&&var&i",put(facilitystartdate,date9.));
  8.         run;       
  9. %end;
  10. %mend years;
  11. %years()
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:symput Macro call Mac acr null

沙发
geniusv 发表于 2013-9-16 21:45:08
你这个例子中,symput会在local创建宏变量,macro run完后宏变量就没了,我估计你说只有第一个循环创建的宏变量是你在run这个macro之前创建的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 热心帮助其他会员

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

藤椅
Tigflanker 发表于 2013-9-16 22:04:09
尝试检查一下 &&var&i 是否名称没有重复命名;尝试检查下其他的数据集是不是空集。
Bye SAS.
若有缘,能重聚。

板凳
superyxo 发表于 2013-9-17 07:45:09
geniusv 发表于 2013-9-16 21:45
你这个例子中,symput会在local创建宏变量,macro run完后宏变量就没了,我估计你说只有第一个循环创建的宏 ...
多谢提醒,是这个问题!

报纸
playmore 发表于 2013-9-17 08:17:03
superyxo 发表于 2013-9-17 07:45
多谢提醒,是这个问题!
在macro里加一个
%global min_&&var&i;
%global max_&&var&i;
就好了
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 热心帮助其他会员

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

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

地板
superyxo 发表于 2013-9-17 08:45:53
Tigflanker 发表于 2013-9-16 22:04
尝试检查一下 &&var&i 是否名称没有重复命名;尝试检查下其他的数据集是不是空集。
是global和local宏变量的问题,在宏里定义的是local的,跑完就没了
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发

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

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

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