下降年份与“if Year> 2005”之间的差异

时间:2018-04-02 10:34:19

标签: stata

我有一个2005年至2015年美国银行高层管理团队的数据集。 现在,如果TMT组成在2006年和2009年间发生变化,我想生成一个变量变量。

首先我使用了:

drop if Year > 2009
drop if Year < 2006
by id (id), sort: gen changed = (DirectorID[1] != DirectorID[_N])

然后我用了

by id (id), sort: gen changed = (DirectorID[1] != DirectorID[_N]) if Year < 2010 & Year > 2005

但是两个变量之间的输出存在差异: 第一个中有247个“无变化”和853个“变更”,第二个变量中有116个“无变化”,其余为“变更”

有人能澄清这两个命令在Stata中的区别吗?

2 个答案:

答案 0 :(得分:1)

有几个原因可能会导致数据集的更改计数不同。对于这两个调用,数据很可能被不同地排序。 (id)部分在此处无效,因为您已按id排序。您可能想要做的是按年份进行剩余排序。因此,bysort id (Year) - 这样,对于您键入的每个命令,数据集的顺序将相同。在第二个命令中,if子句将在年度范围之外的观察中将变量changed设置为缺失,但这些观察仍然包含在计算中。您可以创建一个新变量来标记感兴趣的年份,然后将该新变量添加到bysort调用中。

最后,您需要决定是否只想查看同比变化(changed的值可能会在id内逐年变化),或者值为{ {1}}反映changed在整个感兴趣的时间范围内是否有任何变化(DirectorID的值在changed内会保持不变)。

答案 1 :(得分:0)

这是一个说明差异的玩具示例。基本上,当您删除数据时,最后一次和第一次观察可以相同,但一般来说,您将拥有较少的数据来比较第一次和最后一次观察,因为大部分数据都将消失。当您使用if时,数据仍然存在,即使计算仅限于if的中间观察:

. clear

. input id year director_id

            id       year  directo~d
  1. 1 2016 10
  2. 1 2017 20
  3. 1 2018 30
  4. end

. 
. bys id (year): gen changed = (director_id[1] != director_id[_N]) if year < 2018 & year > 2016
(2 missing values generated)

. list, clean noobs

    id   year   direct~d   changed  
     1   2016         10         .  
     1   2017         20         1  
     1   2018         30         .  

. 
. drop if inlist(year, 2016,2018) 
(2 observations deleted)

. bys id (year): gen changed2 = (director_id[1] != director_id[_N]) if year < 2018 & year > 2016

. list, clean noobs

    id   year   direct~d   changed   changed2  
     1   2017         20         1          0  

我加入了一年,因为这似乎符合你锻炼的精神。