找回密码
 注册
查看: 3169|回复: 0

跟版主crackman读SAS程序(7)

[复制链接]
发表于 2010-8-27 16:05:12 | 显示全部楼层 |阅读模式
本帖最后由 生统家园推荐 于 2010-8-27 16:07 编辑

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;
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 18:34 , Processed in 0.030118 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表