2017-05-18 47 views
0

我有一個從2006年到2012年的面板數據集。我生成了一個新變量entry,輸入到一個國家的公司的值爲1。例如,如果一家公司在時間(t)的銷售價值(。)缺失,則其值爲0,而在(t + 1)時,如果它進入一個國家換句話說,值爲1。我用這個成功的命令如下:Stata的第一次和最後一次發生

egen firm_id=group(firm country) 

by firm_id (year), sort: gen byte entry = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

由於我的數據,從2006年開始我排除的觀察這一年的命令:

bysort firm (year) : replace entry = 0 if year == 2006 

不過我想是不是具有0個值, 在其進入之後的隨後幾年(例如在t + 2或t + 3)具有缺失值。

我申請退出,但我改變了今年的排列順序相同:

gen nyear = -year 

by firm_id (nyear), sort: gen byte exit = /// 
sum(inrange(sales, 0,.)) == 1 & sum(inrange(sales[_n - 1],0,.)) == 0 

,因爲在我的數據的最後一個觀測一年是2012我排除了這些意見:

bysort firm (year) : replace exit = 0 if year == 2012 

再次在這裏,我想要的是,而不是有0個值, 在其後退出(例如在t + 2或t + 3)後的幾年有缺失值。

回答

0

據我所知,變量sales缺少時沒有和正面,否則。

您希望某年的指標成爲某個國家/地區公司的第一個和最後一個銷售年度。

我認爲這會讓你獲得最大的成功。首先,我們需要示例數據!

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float(firm_id year sales) 
1 2006 . 
1 2007 . 
1 2008 42 
1 2009 42 
1 2010 42 
1 2011 . 
1 2012 . 
2 2006 . 
2 2007 666 
2 2008 666 
2 2009 . 
2 2010 . 
2 2011 . 
2 2012 . 
end 

第一個和最後一個日期是最小和最大日期,以銷售額爲條件。

egen first = min(cond(sales < ., year, .)), by(firm_id) 
egen last = max(cond(sales < ., year, .)), by(firm_id) 

有關技術的討論,請參閱section 9 of this paper。然後(1)指標直接

gen isfirst = cond(year == first, 1, .) 
gen islast = cond(year == last, 1, .) 

list, sepby(firm_id) 

    +----------------------------------------------------------+ 
    | firm_id year sales first last isfirst islast | 
    |----------------------------------------------------------| 
    1. |  1 2006  . 2008 2010   .  . | 
    2. |  1 2007  . 2008 2010   .  . | 
    3. |  1 2008  42 2008 2010   1  . | 
    4. |  1 2009  42 2008 2010   .  . | 
    5. |  1 2010  42 2008 2010   .  1 | 
    6. |  1 2011  . 2008 2010   .  . | 
    7. |  1 2012  . 2008 2010   .  . | 
    |----------------------------------------------------------| 
    8. |  2 2006  . 2007 2008   .  . | 
    9. |  2 2007  666 2007 2008   1  . | 
10. |  2 2008  666 2007 2008   .  1 | 
11. |  2 2009  . 2007 2008   .  . | 
12. |  2 2010  . 2007 2008   .  . | 
13. |  2 2011  . 2007 2008   .  . | 
14. |  2 2012  . 2007 2008   .  . | 
    +----------------------------------------------------------+ 

跟着我做什麼不同,2006年或2012年,您可以只建立特殊規則進入cond()語法。

+0

親愛的尼克,非常感謝這個作品,因此在進入和退出後爲此後的幾年創造了缺失的價值。但是,除此之外,我不希望它在過去的幾年中產生缺失值。例如在你的例子中,考慮到firm_id(1)的變量「isfirst」,我希望2006和2007年的「0」而不是「缺失」。換句話說,其入口前幾年的0值在其進入後的幾年中缺失值。 –

+0

爲學生做簡單的運動!提示:'cond(year

+0

我也通過生成一個新變量來管理這個,但是你的提示要好得多,所以不需要創建另一個變量。非常感謝尼克。我非常感謝你的幫助。 –

相關問題