【发布时间】:2014-06-23 15:15:08
【问题描述】:
所以我有一个数据集,其中包含股票 ID 和 date_time 变量等。我想从下一个 date_time 删除 date_time 变量为 30 分钟且库存相同的所有观察值。因此,如果我的数据集如下所示:
Date_Time|Stock_ID
01APR11: 07:50:00|Treasury
01APR11: 07:51:00|Treasury
这两个观察结果将被删除。到目前为止,我正在尝试使用 dif 和 lag 函数将它们标记为删除。这是我的代码
data 3;
set 2;
time_diff=dif(Date_Time)/60;
same_stock=lag(Stock);
delete=.;
if abs(time_diff)<=30 AND same_stock=Stock_ID then delete=1;
run;
在这一点之后,我可以删除删除 = 1 的所有观察结果。 问题是,我认为这段代码效率不高,而且肯定容易出错,特别是如果三个日期时间都紧挨着的话。
必须有更好的方法来做到这一点。
【问题讨论】:
-
您希望如何处理跨度大于 60 分钟的同一股票的一系列条目,但所有条目之间的间隔都小于 10 分钟?全部删除?
-
是的,我想全部删除。
-
老实说,我不认为您现有的方法太糟糕,除非您的数据集非常庞大并且您迫切希望避免多次阅读它。数据集是否按任何特定顺序排序?
-
是的,所以它首先按股票 ID 排序,然后按时间排序,这就是我的解决方案可以工作的原因。这非常令人担忧,因为我认为它很容易出错。
标签: datetime sas time-series