Stata 下降年与“下降年”之间的差异;如果年份>;2005年“;

Stata 下降年与“下降年”之间的差异;如果年份>;2005年“;,stata,Stata,我有一个2005-2015年美国银行高层管理团队的数据集。 现在我想生成一个变更变量,如果TMT的组成在2006年和2009年之间发生了变化 因此,首先我使用: drop if Year > 2009 drop if Year < 2006 by id (id), sort: gen changed = (DirectorID[1] != DirectorID[_N]) 如果年份>2009,则下降 如果年份

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

因此,首先我使用:

drop if Year > 2009
drop if Year < 2006
by id (id), sort: gen changed = (DirectorID[1] != DirectorID[_N])
如果年份>2009,则下降
如果年份<2006,则下降
按id排序:gen changed=(DirectorID[1]!=DirectorID[\N])
后来我用

by id (id), sort: gen changed = (DirectorID[1] != DirectorID[_N]) if Year < 2010 & Year > 2005
按id(id)排序:gen changed=(DirectorID[1]!=DirectorID[\N]),如果年份<2010年&Year>2005年
但是,两个变量之间的输出存在差异: 在第一个变量中,247例为“无变化”,853例为“变化”,116例为“无变化”,其余为第二个变量中的“变化”


有人能澄清一下Stata中这两个命令之间的区别吗?

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


最后,您需要决定是否只想查看逐年变化的情况(在
id
changed
的值可能逐年变化),还是让
changed
的值反映在整个感兴趣的时间框架内
DirectorID
是否有任何变化(在
id
范围内,
changed
的值将保持不变).

这里有一个玩具示例来说明这种差异。基本上,当你删除数据时,最后一次观察和第一次观察可能是相同的,但一般来说,你将有较少的数据来比较第一次和最后一次观察,因为大部分数据都会消失。当你使用
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  
。清除
.input id年份主管\u id
身份证年份目录
一点一二零一六一零
二点一二零一七二零
三点一二零一八三零
4.结束
. 
.bys id(年份):如果年份<2018年且年份>2016年,则更换了gen=(董事id[1]!=董事id[\N])
(生成的2个缺失值)
.名单,干净的角落
id年直接更改~d
1   2016         10         .  
1   2017         20         1  
1   2018         30         .  
. 
.如果输入列表,则删除(20162018年)
(删除2项意见)
.bys id(年份):如果年份<2018年>2016年,则gen changed2=(董事id[1]!=董事id[\N])
.名单,干净的角落
id年份直接~d已更改2
1   2017         20         1          0  

我添加了一个按年排序,因为这似乎符合您练习的精神。

在第二个命令中,if子句将设置变量[changed]对于年范围以外的观测值,我希望遗漏,但这些观测值仍包含在计算中。现在我希望在其他年份保持变量相等(即,如果它在2006-2009年期间[改变],我希望变量也显示它在2005年和2010-2015年期间改变的事实)。我该如何创建该变量?因为我现在使用的已更改命令只提供这些年份的缺失数据。请尝试:
gen interest=inrange(year,20062009)
。然后,
bysort id interest(DirectorID):gen temp=DirectorID[1]!=DirectorID[\N]
。然后,放弃对不感兴趣的by组的计算:
替换temp=。如果感兴趣==0
。然后,使用
bysort id:egen changed=max(temp)
id
的所有观察值进行聚合。