如何在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()
,或者我遗漏了什么?也许吧,但我确实不想过度编写未遗漏的值。