楼主: mumu334
4912 7

[问答] 求高手指点,如何跳出宏循环 [推广有奖]

  • 0关注
  • 0粉丝

本科生

74%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
4 点
热心指数
2 点
信用等级
1 点
经验
2001 点
帖子
51
精华
0
在线时间
165 小时
注册时间
2010-5-8
最后登录
2023-10-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
RT,有如下程序,需要在满足条件(is=1)的情况下跳出宏循环,不知道哪里写错了,恳请高手指点,不甚感激啊!

%macro data(i);
data c&i;
a=3;
is=(a>2);
%mend data;

%macro bn;
%do i=1 %to 5;
%data(&i);
%if is=1 %then %goto ok;
%end;
%ok: put 'Yes';
run;
%mend bn;
%bn;
二维码

扫码加我 拉你入群

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

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

关键词:高手指点 求高手 宏循环 Macro Data 宏循环

沙发
mumu334 发表于 2011-3-25 16:14:15 |只看作者 |坛友微信交流群
补充一下,我现在的程序会循环5次,即使满足if条件语句了也跳不出来。请大家指点!谢谢啦!

使用道具

藤椅
lyfyb99 在职认证  发表于 2011-3-25 22:42:02 |只看作者 |坛友微信交流群
感觉%goto语句不能用在data步里面吧?如下修改可否?
%macro bn;
%do i=1 %to 5;
data c&i;
a=3;
call symput('is',(a>3));
run;

%put &is;

%if &is %then %goto ok;
%end;

%ok: %put 'Yes';

%mend bn;
%bn;
已有 1 人评分热心指数 收起 理由
crackman + 1 鼓励积极发帖讨论

总评分: 热心指数 + 1   查看全部评分

使用道具

板凳
275769263 发表于 2011-3-25 23:39:35 |只看作者 |坛友微信交流群
用call symput时必须注意,赋值和引用不能在同一个步里面,在赋值未完成之前不能引用。你在call symput后引用打印is肯定不成功。

使用道具

报纸
mumu334 发表于 2011-3-25 23:43:10 |只看作者 |坛友微信交流群
3# lyfyb99

用您的方法试了一下,循环能跳出来了。
但是后面如果单独引用is时会出现问题。如在原来程序上加上
data a;
b=&is;
proc print;
run;
这样引用是不成功的。

使用道具

地板
mumu334 发表于 2011-3-25 23:47:46 |只看作者 |坛友微信交流群
4# 275769263

多谢指点。
不知道应该怎么修改后面才能引用is呢?

使用道具

7
275769263 发表于 2011-3-29 08:44:09 |只看作者 |坛友微信交流群
按照三楼的做法是成功的呀...可不可以再详细说一下你想要什么结果?
%macro bn;
%do i=1 %to 5;
data c&i;
a=4;
call symput('is',(a>3));
run;
%put &is;
%if &is %then %goto ok;
%end;
%ok: %put 'Yes';
data a;
b=&is;
proc print;
run;
%mend bn;
%bn;

使用道具

8
mumu334 发表于 2011-4-3 12:10:13 |只看作者 |坛友微信交流群
7# 275769263

没有问题了,呵呵,是我之前没有理解好。谢谢啦!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 05:45