【发布时间】:2020-01-03 02:00:58
【问题描述】:
我的面板数据如下所示。
pid year type occurrence
10001 2012 A 1
10001 2012 A 2
10001 2013 B 5
10001 2013 B 3
10001 2013 B 2
10001 2014 A 1
10001 2014 A 5
10001 2014 A 3
10002 2012 B 2
10002 2012 B 1
10002 2012 B 6
10002 2013 B 3
10002 2013 B 2
10002 2013 B 7
10003 2012 B 2
10003 2012 B 1
10003 2012 B 6
10003 2014 B 3
10003 2014 B 2
10003 2015 B 2
10003 2015 B 5
10003 2015 B 2
10003 2016 B 3
10003 2016 B 6
我想创建一个变量来指示每个 pid 的类型是否多年来一直在更改,从而
pid year type occurrence typechange
10001 2012 A 1 NA
10001 2012 A 2 NA
10001 2013 B 5 "A->B"
10001 2013 B 3 "A->B"
10001 2013 B 2 "A->B"
10001 2014 A 1 "B->A"
10001 2014 A 5 "B->A"
10001 2014 A 3 "B->A"
我尝试循环遍历所有 pid 和年份以跟踪更改,但很快意识到对于我的小笔记本电脑来说代码运行速度太慢。 (数据集约 200,000 个条目)
我决定为type 和type.lag1 创建滞后变量,然后比较两者以创建typechange 变量,但遇到了一堵墙。
预期的滞后变量应如下所示:
pid year type occurrence type.lag1
10001 2012 A 1 NA
10001 2012 A 2 NA
10001 2013 B 5 A
10001 2013 B 3 A
10001 2013 B 2 A
10001 2014 A 1 B
10001 2014 A 5 B
10001 2014 A 3 B
10002 2012 B 2 NA
10002 2012 B 1 NA
10002 2012 B 6 NA
10002 2013 B 3 B
10002 2013 B 2 B
10002 2013 B 7 B
10003 2012 B 2 NA
10003 2012 B 1 NA
10003 2012 B 6 NA
10003 2014 A 3 B
10003 2014 A 2 B
10003 2015 B 2 A
10003 2015 B 5 A
10003 2015 B 2 A
10003 2016 C 3 B
10003 2016 C 6 B
滞后变量应该是这样的,对于每个 pid,如果 2012 年的类型是 A,那么在接下来的 2013 年(如果缺少 2013,那么在 2014 年或以后),所有 pid 的 lag 都应该具有 A 类型。
很多时候,每年都会出现 3 个 pid,但不能保证。也有一些年份丢失的情况。那么滞后应该从前一年(可能不是连续的)获取值。
如果有除了创建滞后变量之外的其他方法来创建typechange,那将非常有帮助。
提前非常感谢您!
【问题讨论】: