如何在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     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) 

最新更新