SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 909|回复: 4
打印 上一主题 下一主题

请教如何查找和处理时间割断(gap),谢谢!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-3-12 20:00:26 | 只看该作者

请教如何查找和处理时间割断(gap),谢谢!

请教各位高手,对于本来应该是连续时间的数据,出现了割断(gap),如何查找数据中是否存在割断并对割断点处加入新的观测数据?
形如下列数据,在01AUG07:21:00:00处出现了割断。
现在的想法是产生一个连续的时间数据集,如01AUG07:00:00:00——02AUG07:23:00:00,然后对割断的数据进行update。不过,感觉思路不太对。
烦请各位高手指点,多谢了!
............
01AUG07:17:00:00 01AUG07 17:00:00     1
01AUG07:18:00:00 01AUG07 18:00:00     2
01AUG07:19:00:00 01AUG07 19:00:00     1
01AUG07:20:00:00 01AUG07 20:00:00     3
01AUG07:22:00:00 01AUG07 22:00:00     4
01AUG07:23:00:00 01AUG07 23:00:00     1
02AUG07:00:00:00 02AUG07 0:00:00       1
02AUG07:01:00:00 02AUG07 1:00:00       5
02AUG07:02:00:00 02AUG07 2:00:00       1
02AUG07:03:00:00 02AUG07 3:00:00       1
...........
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-3-12 21:06:16 | 只看该作者

Re: 请教如何查找和处理时间割断(gap),谢谢!

参见 <!-- l --><a class="postlink-local" href="http://www.mysas.net/forum/viewtopic.php?f=4&amp;t=3840">viewtopic.php?f=4&amp;t=3840</a><!-- l -->
只不过你现在的增量是3600
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-3-12 21:25:06 | 只看该作者

能否不用update?

多谢byes!
除了这种update的方法,还有没有其他方法能够解决这个问题?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-3-13 19:44:54 | 只看该作者

Re: 请教如何查找和处理时间割断(gap),谢谢!

给你想了个不用update的方法:
[code:22wbvb8c]
data a;
input datetime&#58;datetime16&#46; date&#58;date7&#46; time&#58;time8&#46; num;
format datetime&#58;datetime16&#46; date date7&#46; time time8&#46;;
cards;
01AUG07&#58;17&#58;00&#58;00 01AUG07 17&#58;00&#58;00 1
01AUG07&#58;18&#58;00&#58;00 01AUG07 18&#58;00&#58;00 2
01AUG07&#58;19&#58;00&#58;00 01AUG07 19&#58;00&#58;00 1
01AUG07&#58;20&#58;00&#58;00 01AUG07 20&#58;00&#58;00 3
01AUG07&#58;22&#58;00&#58;00 01AUG07 22&#58;00&#58;00 4
01AUG07&#58;23&#58;00&#58;00 01AUG07 23&#58;00&#58;00 1
02AUG07&#58;00&#58;00&#58;00 02AUG07 0&#58;00&#58;00 1
02AUG07&#58;01&#58;00&#58;00 02AUG07 1&#58;00&#58;00 5
02AUG07&#58;02&#58;00&#58;00 02AUG07 2&#58;00&#58;00 1
02AUG07&#58;03&#58;00&#58;00 02AUG07 3&#58;00&#58;00 1
;
run;

%let d=3600;
data b(drop=x y tmp i);
        set a;
        x=lag(datetime);
        y=dif(datetime);
        if _n_=1 then do;x=datetime-&amp;d;y=&amp;d;end;
        if y=&amp;d then output;
        else do;
                tmp=num;
                do i=x+&amp;d to x+y by &amp;d;
                        datetime=i;
                        date=datepart(datetime);
                        time=timepart(datetime);
                        if datetime^=(x+y) then num=&#46;;
                        else num=tmp;
                        output;
                end;
        end;
        format datetime&#58;datetime16&#46; date date7&#46; time time8&#46;;
run;
[/code:22wbvb8c]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-3-14 02:16:08 | 只看该作者

多谢byes的帮助!

多谢byes!
用update已经实现,再和您这种方法比较看看。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 15:56 , Processed in 0.067606 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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