首先,看看我的数据集的一些变量:
firm_id year dyrstr Lack total_workers
2432 2002 1980 29
2432 2003 1980 23
2432 2005 1980 1 283
2432 2006 1980 56
2432 2007 1980 21
2433 2004 2001 42
2433 2006 2001 1 29
2433 2008 2001 1 100
2434 2002 2002 21
2434 2003 2002 55
2434 2004 2002 22
2434 2005 2002 24
2434 2006 2002 17
2434 2007 2002 40
2434 2008 2002 110
2434 2009 2002 158
2434 2010 2002 38
2435 2002 2002 80
2435 2003 2002 86
2435 2004 2002 877
2435 2005 2002 254
2435 2006 2002 71
2435 2007 2002 116
2435 2008 2002 118
2435 2009 2002 1165
2435 2010 2002 67
2436 2002 1992 24
2436 2003 1992 25
2436 2004 1992 22
2436 2005 1992 23
2436 2006 1992 21
2436 2007 1992 100
2436 2008 1992 73
2436 2009 1992 23
2436 2010 1992 40
2437 2002 2002 30
2437 2003 2002 31
2437 2004 2002 21
2437 2006 2002 1 56
2437 2007 2002 20
变量:
-
firm_id 是公司的标识符
-
year 是观察年份
-
dyrstr 是一家公司的创始年
-
Lack 如果前一年缺少观察值则等于1(例如,在数据集的第3行中,缺乏等于1,因为对于ID为2432的公司,2004年没有观察到)
-
total_workers 是 Worker 数量
我想填补空白,即我想创建新的观察结果,如下所示(仅考虑ID为2432的公司):
firm_id year dyrstr Lack total_workers
2432 2002 1980 29
*2432* *2004* *1980* *156*
2432 2003 1980 23
2432 2005 1980 1 283
2432 2006 1980 56
2432 2007 1980 21
我将变量值放在星号中的行是新创建的观察 . 该观察结果应该是先前观察的副本,但需要进行一些修改 .
-
firm_id 应保持与之前的行相同
-
year 应该是上一行加上一年的年份
-
dyrstr 应保持与之前的行相同
-
Lack :此变量具有哪个值无关紧要
-
total_workers 等于0.5 *(连续观察的先前观测值的值)
-
all other variables 我的数据集(我没有在此列出)应保持与之前的行相同
我读了一些关于命令 expand
但是 help expand
对我没什么帮助 . 希望你们中的一个可以帮助我!
3 回答
我的建议依赖于使用
expand
,而这又需要有关要添加的观测数量的信息 . 我忽略了你的变量Lack
,因为Stata本身可以解决差距所在 . 我输入total_workers
的程序基于使用内置命令ipolate
,因此可以在超过1年的间隙中工作,这在您的示例中不会出现 . 如此估计的 Worker 数量不一定是整数 .对于其他插值程序,请查看
cipolate
,csipolate
,pchipolate
,所有这些都可通过ssc desc cipolate
(或等效的)访问 .这种操作取决于完全正确地获得
sort
顺序,即使有经验,我认为这也是微不足道的,所以在为类似问题获得正确的代码时,要为错误的开始做好准备;使用list
语句填写您的试用代码;并开发一个好的玩具示例数据集(正如您在这里提供的那样) .如果在您的示例数据库中,您没有连续几年缺少任何给定公司,则以下情况有效 . 我还假设变量
Lack
是数字,最终结果是一个不 balancer 的面板(你的问题中没有具体说明这一点) .expand
行可以重写为expand Lack + 1, gen(x)
,但也许这样更清楚 .对于您连续几年缺失的更一般情况,以下内容应该假设
Lack
指定缺失的连续年数 . 例如,如果某个公司从2006年到2009年有一个跳跃,那么2009年的观察结果就是Lack = 2
.现在你只需要为你的
total_workers
提出一个估算规则:如果
Lack
是字符串,请使用real
转换为数字 .你已经给出了答案,但我之前必须做类似的事情,并且总是使用
cross
命令,如下所示 . 假设我已经在使用您的数据集并继续使用以下代码:然后从这里开始,以@NickCox的精神使用
ipolate
命令 .我对使用
expand
和cross
的任何利弊特别感兴趣 . (除了我在这里的使用特别依赖于为了构建交叉数据集而每年观察> 0记录的事实,如果我以不同方式创建 ``year'` tempfile,这可以被消除 . )