如何生成组中变量随时间变化的累积和
How to generate cumulative sum of changes of a variable in a group across time
我需要生成变量 sum
,该变量累加了 TA_envi_tot
跨记者-合作伙伴对和年份的变化。 reporter_iso
和 partner_iso
是字符串变量。同时,id
由egen id =group(reporter_iso partner_iso)
生成。
我尝试了这些代码,但无法在下面的“总和”列中生成值:
bysort id (year): gen sum=TA_envi_tot[_n] + TA_envi_tot[_n+1] if TA_envi_tot[_n]!=TA_envi_tot[_n-1]
bysort id (year): replace sum = sum[_n-1] if missing(sum)
id reporter_iso partner_iso year TA_envi_tot sum
3271 ATG DEU 1981 0 0
3271 ATG DEU 1982 0 0
3271 ATG DEU 1983 0 0
3271 ATG DEU 1984 36 36
3271 ATG DEU 1985 36 36
3271 ATG DEU 1986 36 36
3271 ATG DEU 1987 67 103
3271 ATG DEU 1988 67 103
3271 ATG DEU 1989 67 103
4217 BDI BEL 1981 3 3
4217 BDI BEL 1982 3 3
4217 BDI BEL 1983 3 3
4217 BDI BEL 1984 35 38
4217 BDI BEL 1985 35 38
4217 BDI BEL 1986 35 38
4217 BDI BEL 1987 35 38
4217 BDI BEL 1988 36 74
4217 BDI BEL 1989 36 74
4217 BDI BEL 1990 36 74
clear
input id str3 (reporter_iso partner_iso) year TA_envi_tot sum
3271 ATG DEU 1981 0 0
3271 ATG DEU 1982 0 0
3271 ATG DEU 1983 0 0
3271 ATG DEU 1984 36 36
3271 ATG DEU 1985 36 36
3271 ATG DEU 1986 36 36
3271 ATG DEU 1987 67 103
3271 ATG DEU 1988 67 103
3271 ATG DEU 1989 67 103
4217 BDI BEL 1981 3 3
4217 BDI BEL 1982 3 3
4217 BDI BEL 1983 3 3
4217 BDI BEL 1984 35 38
4217 BDI BEL 1985 35 38
4217 BDI BEL 1986 35 38
4217 BDI BEL 1987 35 38
4217 BDI BEL 1988 36 74
4217 BDI BEL 1989 36 74
4217 BDI BEL 1990 36 74
end
bysort id (year) : gen wanted = sum(TA_envi_tot * (TA_envi_tot != TA_envi_tot[_n-1]))
我需要生成变量 sum
,该变量累加了 TA_envi_tot
跨记者-合作伙伴对和年份的变化。 reporter_iso
和 partner_iso
是字符串变量。同时,id
由egen id =group(reporter_iso partner_iso)
生成。
我尝试了这些代码,但无法在下面的“总和”列中生成值:
bysort id (year): gen sum=TA_envi_tot[_n] + TA_envi_tot[_n+1] if TA_envi_tot[_n]!=TA_envi_tot[_n-1]
bysort id (year): replace sum = sum[_n-1] if missing(sum)
id reporter_iso partner_iso year TA_envi_tot sum
3271 ATG DEU 1981 0 0
3271 ATG DEU 1982 0 0
3271 ATG DEU 1983 0 0
3271 ATG DEU 1984 36 36
3271 ATG DEU 1985 36 36
3271 ATG DEU 1986 36 36
3271 ATG DEU 1987 67 103
3271 ATG DEU 1988 67 103
3271 ATG DEU 1989 67 103
4217 BDI BEL 1981 3 3
4217 BDI BEL 1982 3 3
4217 BDI BEL 1983 3 3
4217 BDI BEL 1984 35 38
4217 BDI BEL 1985 35 38
4217 BDI BEL 1986 35 38
4217 BDI BEL 1987 35 38
4217 BDI BEL 1988 36 74
4217 BDI BEL 1989 36 74
4217 BDI BEL 1990 36 74
clear
input id str3 (reporter_iso partner_iso) year TA_envi_tot sum
3271 ATG DEU 1981 0 0
3271 ATG DEU 1982 0 0
3271 ATG DEU 1983 0 0
3271 ATG DEU 1984 36 36
3271 ATG DEU 1985 36 36
3271 ATG DEU 1986 36 36
3271 ATG DEU 1987 67 103
3271 ATG DEU 1988 67 103
3271 ATG DEU 1989 67 103
4217 BDI BEL 1981 3 3
4217 BDI BEL 1982 3 3
4217 BDI BEL 1983 3 3
4217 BDI BEL 1984 35 38
4217 BDI BEL 1985 35 38
4217 BDI BEL 1986 35 38
4217 BDI BEL 1987 35 38
4217 BDI BEL 1988 36 74
4217 BDI BEL 1989 36 74
4217 BDI BEL 1990 36 74
end
bysort id (year) : gen wanted = sum(TA_envi_tot * (TA_envi_tot != TA_envi_tot[_n-1]))