我认为这可能很简单,但在Stata中还没有找到实现这一点的方法,所以如果有人能帮我,我将不胜感激。我试图将值从一个组复制到另一个组,但有一个限制,即值必须来自前一年。我想我想要的例子和结果可能会让它更清楚:
我有这样的数据:
year group_id educ place
1990 1 6 a
1990 1 6 b
1992 2 2 c
1992 2 2 d
1994 3 11 e
1994 3 11 f
1990 4 10 g
1990 4 10 h
1992 5 5 i
1992 5 5 j
1994 6 7 k
1994 6 7 l
我有不同的组,由"group_id"和不同的年份("year")标识,例如,我希望组获得前一年的教育值。但我不希望1990年的价值比1994年高。这是负鼠吗?我的数据最终会是这样的:
year group_id educ place prev_educ
1990 1 6 a .
1990 1 6 b .
1992 2 2 c 6
1992 2 2 d 6
1994 3 11 e 2
1994 3 11 f 2
1990 4 10 g .
1990 4 10 h .
1992 5 5 i 10
1992 5 5 j 10
1994 6 7 k 5
1994 6 7 l 5
我尝试了的变体
gen prev_educ=.
bysort group_id: replace prev_educ=educ[_N -1] if group_id[_n]!=group_id[_n-1]
这显然不是我想要的。
这是一个非常危险的数据结构,因为不小心进行排序可能会破坏其完整性。似乎只有year
的顺序告诉您1、2、3属于一起,4、5、6属于一起。
这复制了您的示例:
clear
input year group_id educ str1 place
1990 1 6 a
1990 1 6 b
1992 2 2 c
1992 2 2 d
1994 3 11 e
1994 3 11 f
1990 4 10 g
1990 4 10 h
1992 5 5 i
1992 5 5 j
1994 6 7 k
1994 6 7 l
end
gen prev_educ = .
replace prev_educ = educ[_n-1] if year > year[_n-1]
replace prev_educ = prev_educ[_n-1] if group_id == group_id[_n-1] & missing(prev_educ)