如何将前一组中的值复制到Stata中的下一组中

时间:2014-11-12 22:07:21

标签: 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"和不同年份("年"),例如,我希望团体获得前一年的教育价值。但我不希望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] 

这显然不是我想要的。

1 个答案:

答案 0 :(得分:3)

这是一种非常危险的数据结构,因为无需过于谨慎的排序可能会破坏其完整性。似乎只有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)