冰清玉树 发表于 2021-10-5 22:17 
step3这里,计算信息熵方法不一样
gen d`x' = 1 + 1/log(m) * e1`x'
感谢老师的解答,我把过程修改之后还是跑不出来您的结果,请问老师下面列的程序是不是一开始就存在什么逻辑问题呀
tsset id year
***设置变量集合
global alist "v2 v4 v6 v7 v8 v9 "
global blist "v1 v3 v5"
global xlist "v1 v2 v3 v4 v5 v6 v7 v8 v9"
***STEP1:标准化
****指标为正向指标的时候
foreach x of global alist {
egen min`x' = min(`x')
egen max`x' = max(`x')
gen standard`x' = (`x'-min`x')/(max`x'-min`x')
}
****指标为负向指标的时候
foreach x of global blist {
egen min`x' = min(`x')
egen max`x' = max(`x')
gen standard`x' = (max`x'-`x')/(max`x'-min`x')
}
***step2:计算第i年指标j的权重w1x(注意:w应该是一个三维指标ijt)
foreach x of global xlist{
egen sum`x' = total(standard`x')
gen w1`x' = standard`x'/sum`x'
}
***step3:计算指标的信息熵与冗余度
by id, sort:egen m = count (year)
foreach x of global xlist{
gen w`x' = w1`x' + 0.0000000001
egen e1`x' = total(w`x' * log(w`x'))
gen b`x' = -1/log(m) *e1`x'
gen d`x' = 1 - b`x'
}
***step4:计算指标权重w2x
gen sumd = dv1+dv2+dv3+dv4+dv5+dv6+dv7+dv8+dv9
foreach x of global xlist{
gen w2`x' = d`x' / sumd
}
***step5:计算综合指标
foreach x of global xlist {
gen S`x' = standard`x' * w2`x'
}
gen SSS = Sv1+Sv2+Sv3+Sv4+Sv5+Sv6+Sv7+Sv8+Sv9
sum SSS