原帖位置如下:
http://www.pinggu.org/bbs/viewthread.php?tid=889979&page=1#pid6792399
data raw;
input date yymmdd8. week;
format date yymmdd10.;
datalines;
20100628 1
20100629 1
20100630 1
20100701 1
20100702 1
20100705 2
20100706 2
20100707 2
20100708 2
20100709 2
20100712 3
20100713 3
20100714 3
;
data out;
_temp=0;
do _n_=1 by 1 until(last.week);
set raw ;
by week;
_temp+1;
end;
if _temp=5 then output;
do _n_=1 to _n_;
set raw;
if _temp<5 then output;
end;
run;
问题一:
上面这段程序是第一种方法,请问第一个循环语句do _n_=1 by 1 until(last.week);中 “by 1”的作用是什么?
如果by 1 的意思是每次循环增加一的话,把by 1去掉结果应该不会变,但是把by 1去掉之后运行程序就得不到想要的结果了。
问题二:
如果将第二个data步修改成如下
data out;
_temp=0;
do _n_=1 by 1 until(last.week);
set raw ;
by week;
_temp=_temp+1;
end;
run;
即删掉第二个循环,只保留第一个循环,得到的运行成果如下,即只输出了每周最后一天的观测,我想问的是为什么其他天数的观测不会被输出,set raw不是应该读入了所有的观测嘛?其实我搞不明白的是第一个循环里面运行的顺序,希望哪位高手能够解答一下。
temp data week
5 2010/7/2 1
5 2010/7/9 2
3 2010/7/14 3