我有一个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中的区别吗?
答案 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
我加入了一年,因为这似乎符合你锻炼的精神。