1

使用Stata,如果满足某个标准,我想删除当前观察之前的所有观察。

确切地说,在这个示例中,我想删除出现在 a closeof的观察之前的所有观察0

t   close   id  rdate
MPC 0       MPC 31may2011
MPC 0       MPC 01jun2011
MPC 0       MPC 24jun2011
MPC 37.65   MPC 27jun2011
MPC 38.7    MPC 28jun2011
MPC 40.07   MPC 29jun2011
MPC 0       MPC 30jun2011
MPC 42.2    MPC 01jul2011
MPC 42.21   MPC 05jul2011
MPC 41.89   MPC 06jul2011
MPC 41.78   MPC 07jul2011
MPC 41.41   MPC 08jul2011
MPC 40.1    MPC 11jul2011
MPC 40.48   MPC 12jul2011
MPC 39.96   MPC 13jul2011
MPC 38.64   MPC 14jul2011
MPC 39.16   MPC 15jul2011
MPC 39.12   MPC 18jul2011
MPC 39.74   MPC 19jul2011
MPC 39.53   MPC 20jul2011
MPC 40.1    MPC 21jul2011
MPC 40.57   MPC 22jul2011
MPC 41.37   MPC 25jul2011
MPC 43.05   MPC 26jul2011

像这样的东西:by t: drop if _n* < _n & close == 0然后必须导致:

t   close   id  rdate
MPC 42.2    MPC 01jul2011
MPC 42.21   MPC 05jul2011
MPC 41.89   MPC 06jul2011
MPC 41.78   MPC 07jul2011
MPC 41.41   MPC 08jul2011
MPC 40.1    MPC 11jul2011
MPC 40.48   MPC 12jul2011
MPC 39.96   MPC 13jul2011
MPC 38.64   MPC 14jul2011
MPC 39.16   MPC 15jul2011
MPC 39.12   MPC 18jul2011
MPC 39.74   MPC 19jul2011
MPC 39.53   MPC 20jul2011
MPC 40.1    MPC 21jul2011
MPC 40.57   MPC 22jul2011
MPC 41.37   MPC 25jul2011
MPC 43.05   MPC 26jul2011

这似乎微不足道,但我就是想不通。

主要问题是我不知道如何描述或命名这种技术,因此我无法搜索它。

我怎样才能做到这一点?

4

2 回答 2

3

这可以压缩。最后一个零在

egen lastz = max(rdate / (close == 0)), by(id)

那么你就可以

drop if date < lastz

You can Google for my article "Compared with..." In the Stata Journal for discussion of this technique. You will get missings automatically if there are no zeros.

于 2013-03-30T06:32:01.073 回答
0

我现在设法使用以下“hack”找到了解决此问题的方法。但是,我希望有一种更快、更清洁的方法来做到这一点。

* drop all obs before a close price of 0 if occuring *
sort ticker_id rdate
gen tagdate = rdate if close == 0
by ticker_id: egen lasttagdate = max(tagdate)
drop if rdate <= lasttagdate & !missing(lasttagdate)
drop tagdate lasttagdate
于 2013-03-30T00:40:45.707 回答