|
之前分享的代码是组内没有重复值的情况下。如果组内出现了重复值需要做一些修正,如下:
clear
input str20 id number
"a" 2
"a" 2
"a" 2
"a" 2
"a" 2
"a" 8
"b" 5
"b" 6
"b" 10
"b" 8
"c" 5
"c" 10
"c" 15
"c" 12
end
save 08,replace
rename (id number)(id1 number1)
save 0801,replace
clear
use 08
cross using 0801
drop if id !=id1
drop if number1==number
bysort id : gen re1=1 if number1>number
bysort id number: gen re2=sum(re1)
bysort id number :egen re3=max(re2)
bysort id number:egen re4=total(number1) if number1>number
bysort id number:keep if re2==re3
duplicates drop id number,force
keep id number re3 re4
rename (re3 re4)(结果1 结果2)
save 0802,replace
clear
use 08
merge m:1 id number using 0802
gen k = 1 if number[_n]==number[_n-1] | number[_n]==number[_n+1]
bysort id number : egen k1=total(k)
foreach v of varlist 结果1 结果2 {
bysort id:replace `v'=1/k1*`v' if number[_n]==number[_n+1] | number[_n]==number[_n-1]
}
drop k*
drop _merge
erase 08.dta
erase 0801.dta
erase 0802.dta
不懂得话可以来问我,也希望大家指出代码的问题。
|