Stata 下降年与“下降年”之间的差异;如果年份>;2005年“;
我有一个2005-2015年美国银行高层管理团队的数据集。 现在我想生成一个变更变量,如果TMT的组成在2006年和2009年之间发生了变化 因此,首先我使用: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,则下降 如果年份
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
的所有观察值进行聚合。