2013-03-30 99 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