(Stata)在一年内通过多次观测发现早年的值

(Stata)在一年内通过多次观测发现早年的值,stata,Stata,我在用Stata。我有一个数据集,在给定的一年内有多家公司和它们的银行。由于公司通常有多家银行,因此一个公司年度有多个观察结果。我有一个变量“bank_exityear”,它包含样本中某家银行的最后一年。我想创建一个变量,对于给定年份内的每家公司,该变量包含上一年(以及同一家公司)的最小“银行退出时间” 示例数据集附于此处: 我想创建的变量是粗体的“want”。数据始于2008年 创建此变量的最佳方法是什么?您的问题有点不清楚,但我相信 bysort bank_id (year) : gen

我在用Stata。我有一个数据集,在给定的一年内有多家公司和它们的银行。由于公司通常有多家银行,因此一个公司年度有多个观察结果。我有一个变量“bank_exityear”,它包含样本中某家银行的最后一年。我想创建一个变量,对于给定年份内的每家公司,该变量包含上一年(以及同一家公司)的最小“银行退出时间”

示例数据集附于此处:

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


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

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

bysort bank_id (year) : gen lag_exit = bank_exit_year[_n-1]
bysort bank_id : egen min_var = min(lag_exit )

应该行

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

bysort bank_id (year) : gen lag_exit = bank_exit_year[_n-1]
bysort bank_id : egen min_var = min(lag_exit )

应该有效

这种策略可能会奏效:

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

这是假设一年中没有缺口。

这种策略可能会奏效:

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

这假设一年中没有间隔。

这里有一个使用
rangestat
(来自SSC)的解决方案。要安装它,请在Stata的命令窗口中键入:

ssc install rangestat
对于手头的问题,这需要在相同的firmid的所有观察中找到最小银行存在时间,其年份比当前观察的年份少一年:

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 |
     +-----------------------------------------------------+

这里有一个使用
rangestat
(来自SSC)的解决方案。要安装它,请在Stata的命令窗口中键入:

ssc install rangestat
对于手头的问题,这需要在相同的firmid的所有观察中找到最小银行存在时间,其年份比当前观察的年份少一年:

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 |
     +-----------------------------------------------------+

谢谢你的回复。不幸的是,它没有创建我需要的变量,因为指数化_n-1只返回一个观察值,因此可能无法捕获t-1中公司的所有观察值。我需要检索每个公司在t-1中所有观察到的银行退出年的最小值。谢谢您的回复。不幸的是,它没有创建我需要的变量,因为指数化_n-1只返回一个观察值,因此可能无法捕获t-1中公司的所有观察值。我需要检索每个公司在t-1中所有观察中的银行退出年数。您应该从ssc安装
dataex
。这对每个人来说都比发布数据的图像容易得多。您应该从ssc安装
dataex
。这对每个人来说都比发布数据的图像容易得多。