【问题标题】:Find out if firm enters or leaves industries over time了解公司是否随着时间的推移进入或离开行业
【发布时间】:2020-03-21 06:30:48
【问题描述】:

我有一个包含公司信息的数据集:

clear
input firm_id str6 industry int fyear int
1084    7372    2010
1084    7375    2010
1084    7372    2011
1084    7375    2011
1084    7372    2012
1084    7375    2012
1084    7372    2013
1084    7375    2013
1084    7372    2014
1084    7375    2014
1094    2865    2002
1094    2879    2002
1094    5122    2002
1094    5169    2002
1094    2865    2003
1094    2879    2003
1094    5122    2003
1094    5169    2003
1094    2865    2004
1094    2879    2004
1094    5122    2004
1094    5169    2004
1094    2865    2005
1094    2879    2005
1094    5122    2005
1094    5169    2005
1094    2865    2006
1094    2879    2006
1094    5122    2006
1094    5169    2006
1094    2865    2007
1094    2879    2007
1094    5169    2007
1094    2865    2008
1094    2879    2008
end

除了firm_id,它还包括公司在特定年份活跃的行业的信息。

我怎样才能知道公司在某一年离开和进入了多少行业?

我知道我可以通过编写一个“循环中的循环”来查看每个单独的观察结果并检查year+1 是否存在相同的firm_id 和industry 组合来做到这一点。但是我的数据集很大,效率极低。

我也考虑过使用reshape wide 的解决方案,但也找不到解决我的问题的方法(当然,这会产生大量变量,而且效率也不高)。

【问题讨论】:

    标签: time-series stata panel-data


    【解决方案1】:

    如果您试图为每个公司生成一个单一的观察结果,其中包含公司每年进入和退出的行业数量,我相信下面的代码应该可以工作。变量enter 和leave(分别)表示在给定的观察中公司是否进入或存在该行业。在数据中使用foreach 循环多年来,您可以生成每个变量,指示公司每年进入还是退出。

    bys firm_id industry (fyear): gen prevyear = fyear[_n-1]
    gen yrdifpast = fyear - prevyear
    gen enter = yrdifpast > 1
    
    bys firm_id industry (fyear): gen nextyear = fyear[_n+1]
    gen yrdiffuture = nextyear - fyear
    gen leave = yrdiffuture > 1
    
    levelsof fyear, local(years)
    foreach yr of local years {
        gen in_`yr'  = fyear==`yr'&enter==1
        gen out_`yr' = fyear==`yr'&leave==1
    }
    
    collapse (sum) in_* out_*, by(firm_id)
    
    list
         +----------------------------------------------------------------------------------------------+
      1. | firm_id | in_2002 | in_2003 | in_2004 | in_2005  | in_2006  | in_2007  | in_2008  | in_2010  |
         |    1084 |       0 |       0 |       0 |       0  |       0  |       0  |       0  |       2  |
         |---------+---------+---------+---------+----------+----------+----------+----------+----------|
         | in_2011 | in_2012 | in_2013 | in_2014 | out_2002 | out_2003 | out_2004 | out_2005 | out_2006 |
         |       0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        0 |
         |----------------------------------------------------------------------------------------------|
         |  out_2007  |  out_2008  |  out_2010  |  out_2011   |  out_2012   |  out_2013   |  out_2014   |
         |         0  |         0  |         0  |         0   |         0   |         0   |         2   |
         +----------------------------------------------------------------------------------------------+
    
         +----------------------------------------------------------------------------------------------+
      2. | firm_id | in_2002 | in_2003 | in_2004 | in_2005  | in_2006  | in_2007  | in_2008  | in_2010  |
         |    1094 |       4 |       0 |       0 |       0  |       0  |       0  |       0  |       0  |
         |---------+---------+---------+---------+----------+----------+----------+----------+----------|
         | in_2011 | in_2012 | in_2013 | in_2014 | out_2002 | out_2003 | out_2004 | out_2005 | out_2006 |
         |       0 |       0 |       0 |       0 |        0 |        0 |        0 |        0 |        1 |
         |----------------------------------------------------------------------------------------------|
         |  out_2007  |  out_2008  |  out_2010  |  out_2011   |  out_2012   |  out_2013   |  out_2014   |
         |         1  |         2  |         0  |         0   |         0   |         0   |         0   |
         +----------------------------------------------------------------------------------------------+
    
    

    【讨论】:

      【解决方案2】:

      我看不出这里需要任何循环。但需要的是精确和明确的规则。在这里,只要有记录的第一年在数据集中的第一年之后,公司就会进入一个行业,而只要有记录的最后一年在数据集中的最后一年之前,公司就会离开。此外,如果有记录的下一年超过一年,公司将离开该行业,如果有记录的上一年超过一年,则公司进入该行业。这允许离开和重新进入,尽管这种变化可能是不可能的。

      summarize fyear, meanonly 
      local first = r(min) 
      local last = r(max)     
      bysort firm_id industry (fyear) : generate enter = (fyear > `first') if _n == 1 
      by firm_id industry : replace enter = (fyear - fyear[_n-1]) > 1 if _n > 1    
      by firm_id industry : generate leave = fyear < `last' if _n == _N 
      by firm_id industry : replace leave = (fyear[_n+1] - fyear) > 1 if _n < _N 
      
      table fyear firm_id, c(sum enter sum leave)  
      

      【讨论】:

        猜你喜欢
        • 2020-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多