如何在Stata中将值从上一个组复制到下一个组
我认为这可能很简单,但在斯塔塔还没有找到一种方法,所以如果有人能帮助我,我将非常感激。我正在尝试将值从一个组复制到另一个组,但有一个限制,即值必须来自上一年。我想我想要的例子和结果可能会更清楚: 我有如下数据:如何在Stata中将值从上一个组复制到下一个组,stata,Stata,我认为这可能很简单,但在斯塔塔还没有找到一种方法,所以如果有人能帮助我,我将非常感激。我正在尝试将值从一个组复制到另一个组,但有一个限制,即值必须来自上一年。我想我想要的例子和结果可能会更清楚: 我有如下数据: year group_id educ place 1990 1 6 a 1990 1 6 b 1992 2 2 c 1992 2 2 d 1994
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
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
我有不同的组,由“组id”和不同的年份(“年”)标识,例如,我想让组获得上一年的教育价值。但我不想从1994年得到1990年的价值。这可能吗?我的数据最终可能会是这样的:
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
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]
这显然不是我想要的。这是一个非常危险的数据结构,因为不加特别注意的排序可能会破坏其完整性。似乎只有
年的顺序
告诉您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)
这是一种非常危险的数据结构,因为不加特别注意的排序可能会破坏其完整性。似乎只有
年的顺序
告诉您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)
这是一种非常危险的数据结构,因为不加特别注意的排序可能会破坏其完整性。似乎只有
年的顺序
告诉您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)
这是一种非常危险的数据结构,因为不加特别注意的排序可能会破坏其完整性。似乎只有
年的顺序
告诉您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)
谢谢,添加了失败的尝试。谢谢,添加了失败的尝试。谢谢,添加了失败的尝试。谢谢,添加了失败的尝试。非常感谢!我理解这一问题,并将努力改变这一点,但即使如此,您的解决方案仍然非常有效,谢谢。您是否可以保留
&missing()
,或者我遗漏了什么?也许吧,但我真的不想过度编写未遗漏的值。非常感谢!我理解这一问题,并将努力改变这一点,但即使如此,您的解决方案仍然非常有效,谢谢。您是否可以保留&missing()
,或者我遗漏了什么?也许吧,但我真的不想过度编写未遗漏的值。非常感谢!我理解这一问题,并将努力改变这一点,但即使如此,您的解决方案仍然非常有效,谢谢。您是否可以保留&missing()
,或者我遗漏了什么?也许吧,但我真的不想过度编写未遗漏的值。非常感谢!我理解这一问题,并将努力改变这一点,但即使如此,您的解决方案仍然非常有效,谢谢。您是否可以保留&missing()
,或者我遗漏了什么?也许吧,但我确实不想过度编写未遗漏的值。