SAS中文论坛

标题: DO循环问题 [打印本页]

作者: shiyiming    时间: 2012-12-17 15:54
标题: DO循环问题
data a;
do i=1 to 5;
x=i+1;
put i=;put x=;

end;
run;

结果:i=1
x=2
i=2
x=3
i=3
x=4
i=4
x=5
i=5
x=6

但是数据集里面是i=6 x=6?
作者: shiyiming    时间: 2012-12-17 21:43
标题: Re: DO循环问题
当循环至i=5时,x=5+1=6,put i=5,x=6至log,此时i=6,因为每次do loop结束前index=index+increment,未定义increment时,默认为1,即i=5+1,然后i=6返回do语句,而此时的i超出了i的取值范围,故循环不运行,直接end,然后run,即Implied output,将i=6,x=6写入数据集。
作者: shiyiming    时间: 2012-12-18 10:02
标题: Re: DO循环问题
good point.
作者: shiyiming    时间: 2012-12-20 23:14
标题: Re: DO循环问题
简单点说就是在END之后才会运行SAS 数据自带的OUTPUT,才会有i=6 x=6输出到数据集中
作者: shiyiming    时间: 2012-12-20 23:15
标题: Re: DO循环问题
你自己在END 之加个OUTPUT 就是你想要的结果了。
作者: shiyiming    时间: 2013-1-6 23:59
标题: Re: DO循环问题
[quote="houzm13":tc3r7pxv]你自己在END 之加个OUTPUT 就是你想要的结果了。[/quote:tc3r7pxv]
to be more accurate, adding the output before the RUN;
作者: Emma    时间: 2016-5-15 15:16
shiyiming 发表于 2012-12-17 21:43
当循环至i=5时,x=5+1=6,put i=5,x=6至log,此时i=6,因为每次do loop结束前index=index+increment,未定义 ...


作者: BioSas    时间: 2016-5-17 05:28
类似题目本人在找工笔试中曾经遇见过,本人觉得这种题不是很有意思,因为实际编程时都会在END之前加上output; 或者加上if i=5 then output;




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2