2013-03-30 50 views
1

使用Stata,如果满足某个标准,我想放弃所有在当前之前出现的观测值。如何在Stata之前删除所有观察记录?

确切地说,在这个样本中,我想删除所有出现在观察前的观察值,其中close0

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 

这似乎微不足道,但我无法弄清楚。

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

我该如何做到这一点?

回答

3

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

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

然后你就可以

drop if date < lastz 

您可以谷歌为我的文章“相比......”在Stata的杂志此技术的讨论。如果没有零,你将自动得到错误。

+0

嗯,当'close!= 0'时,你除以零? – Tom

+0

正确;并故意如此。除以零会产生错误,但除非面板的所有值都丢失,否则它们将被忽略。无论哪种方式,它应该没问题。 –

+0

这在Stata 13中似乎不再适用了。有什么改变了吗? – Tom

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