(Stata)在一年内通过多次观察找到早年的值

时间:2016-09-23 15:17:02

标签: stata

我正在使用Stata。我有一个多年内多家公司及其银行的数据集。由于公司通常拥有一家以上的银行,因此公司年度会有多次观察。我有一个变量“bank_exityear”,其中包含银行在样本中的最后一年。我想创建一个变量,对于给定年份内的每个公司,它包含前一年(和同一公司)的最小“bank_exityear”。

此处附有一个示例数据集:

enter image description here

我想要创建的变量是粗体“想要”。数据始于2008年。

创建此变量的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

这种策略可能会起到作用:

clear
input year firmid bankid bank_exityear want
2008 1 1 2008 .
2008 1 2 2015 .
2009 1 2 2015 2008
2009 1 3 2015 2008
2010 1 2 2015 2015
2010 1 3 2015 2105
end

tempfile min_year
preserve
    collapse (min) want2 = bank_exityear, by(firmid year)
    save `min_year' 
restore

replace year = year - 1
merge m:1 firmid year using "`min_year'", nogen keep(master match)
replace year = year + 1

这假设年内没有差距。

答案 1 :(得分:2)

这是使用rangestat(来自SSC)的解决方案。要安装它,请输入Stata的命令窗口:

ssc install rangestat

对于手头的问题,这需要在同一坚定的所有观察中找到最小的 bank_exityear 少一个当前观察的一年:

clear
input year firmid bankid bank_exityear want
2008 1 1 2008 .
2008 1 2 2015 .
2009 1 2 2015 2008
2009 1 3 2015 2008
2010 1 2 2015 2015
2010 1 3 2015 2105
end

rangestat (min) bank_exityear, interval(year -1 -1) by(firmid)
list

和结果:

. list, sepby(firmid)

     +-----------------------------------------------------+
     | year   firmid   bankid   bank_e~r   want   bank_e~n |
     |-----------------------------------------------------|
  1. | 2008        1        1       2008      .          . |
  2. | 2008        1        2       2015      .          . |
  3. | 2009        1        2       2015   2008       2008 |
  4. | 2009        1        3       2015   2008       2008 |
  5. | 2010        1        2       2015   2015       2015 |
  6. | 2010        1        3       2015   2105       2015 |
     +-----------------------------------------------------+

答案 2 :(得分:0)

你的问题有点不清楚,但我相信

的一些组合
bysort bank_id (year) : gen lag_exit = bank_exit_year[_n-1]
bysort bank_id : egen min_var = min(lag_exit )

应该有效