楼主: pinggu2688
1479 4

[原创博文] 循环变量的使用问题 [推广有奖]

  • 2关注
  • 0粉丝

博士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
42 个
通用积分
40.5335
学术水平
1 点
热心指数
3 点
信用等级
1 点
经验
3113 点
帖子
166
精华
0
在线时间
100 小时
注册时间
2009-11-12
最后登录
2023-12-9

10论坛币
请问如果用循环
do i=1 to 10;
........

end;
表明i从1到10循环,

我的问题是现在要定义j循环,j和i不一样,j不是数字,是字符,j=a,b,c,d;也就是第一轮循环j=a,第二轮循环j=b,以此类推,请问如何写循环代码?

谢谢

最佳答案

pobel 查看完整内容

%macro test; %let string=a*b*c*d; %let i=1; %do %while(%scan(&string,&i,*) ne ); %let char=%scan(&string,&i,*); %put char &i: &char; %let i=%eval(&i+1); %end; %mend; %test
关键词:我的问题 End 如何写 如何
沙发
pobel 在职认证  发表于 2011-7-6 14:29:05 |只看作者 |坛友微信交流群
%macro test;
     %let string=a*b*c*d;
     %let i=1;

     %do %while(%scan(&string,&i,*) ne );
         %let char=%scan(&string,&i,*);
         %put char &i: &char;
                 %let i=%eval(&i+1);
     %end;      
%mend;

%test
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
honghejing + 1 + 1 + 1 这种方法也不错

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

和谐拯救危机

使用道具

藤椅
soporaeternus 发表于 2011-7-6 14:40:54 |只看作者 |坛友微信交流群
  1. data _null_;
  2.         do i='a','b','c','d';
  3.                 put i=;
  4.         end;       
  5. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
pinggu2688 + 1 + 1 + 1 我很赞同
pobel + 1 + 1 + 1 我很赞同

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

Let them be hard, but never unjust

使用道具

板凳
pinggu2688 发表于 2011-7-6 23:27:21 |只看作者 |坛友微信交流群
感谢1楼朋友的回复,您的code在data步可以,但是问题是如果在宏中就出错。
比如:
%macro test;
data _null_;
            %do i='a','b','c','d';
                    %put "i= &i";
            %end;      
    run;
%mend;

错误信息:ERROR: Expected %TO not found in %DO statement.  A dummy macro will be compiled.
请问如何解决?

使用道具

报纸
bobguy 发表于 2011-7-7 10:35:33 |只看作者 |坛友微信交流群
pinggu2688 发表于 2011-7-6 14:29
请问如果用循环
do i=1 to 10;
........

end;
表明i从1到10循环,

我的问题是现在要定义j循环,j和i不一样,j不是数字,是字符,j=a,b,c,d;也就是第一轮循环j=a,第二轮循环j=b,以此类推,请问如何写循环代码?

谢谢
Others already gives you some solutions.

Here is a way to get the job done in a different angle. It has many other usages


15 data _null_;
16 array charv[30] $1 _temporary_ ('a', 'b', 'c', 'd','e', '0');
WARNING: Partial value initialization of the array charv.
17 do i=1 to dim(charv);
18
19 if charv=' ' then leave;
20 put i= charv=;
21
22 end;
23 run;
i=1 charv[1]=a
i=2 charv[2]=b
i=3 charv[3]=c
i=4 charv[4]=d
i=5 charv[5]=e
i=6 charv[6]=0
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds

使用道具

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

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

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

GMT+8, 2024-5-25 23:20