我有一个有关公司信息的数据集:
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
,它还包含有关该公司在给定年份活跃的行业的信息。
我如何找到某一年公司离开并进入的行业数量?
[我知道我可以通过编写一个“循环中的循环”来执行此操作,该循环着眼于每个观察值,并检查firm_id
+1是否存在相同的industry
和year
组合。但是我的数据集很大,因此效率极低。
我也考虑过使用reshape wide
的解决方案,但也找不到我的问题的解决方案(当然,这会产生大量的变量,而且效率也不高。)]
[我有一个包含公司信息的数据集:清除输入firm_id str6 Industry int fyear int 1084 7372 2010 1084 7375 2010 1084 7372 2011 1084 7375 2011 1084 7372 ...
我看不到这里需要任何循环。但是需要的是精确而明确的规则。在这里,只要有记录的第一年在数据集中的第一年之后,就进入一个行业,而有记录的最后一年在数据集中的最后一年之前,则离开一个行业。此外,如果有记录的下一年超过一年,则企业离开该行业;如果有记录的前一年超过一年,则该公司进入该行业。这允许离开并重新进入,尽管这种变化可能不大。
[如果您尝试针对每家公司与该公司每年进入和退出的行业数量生成一个单一的观察值,我相信以下代码应该有效。变量enter
和leave
分别表示企业在给定观察中是否进入或存在该行业。在数据中使用多年的foreach
循环,然后可以生成指示企业每年进入还是退出的每个变量。