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;
1.第一个do until循环实现的是计数:就是计算同一个WEEK的累及个数,存在变量_temp中
2.IF THEN 选择输出
3.遍历RAW数据集,选择输出。
在这里注意个就是BY的用法
分组遍历数据集RAW
还要注意UNTIL里面的last.week的用法,直到last.week=1的时候停止循环
其实也可以这样来写:
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
;
proc sort data=raw;
by week;
run;
data out;
set raw;
by week;
if first.week then _temp=1;
else _temp+1;
run;
data out(drop=_temp);
set out;
if week=3 or _temp=5;
run;