哪位大神知道问题出在哪里,可以有偿帮助修改
apt prog drop szf1
prog szf1
set more off
preserve
quietly {
local m = `1'
local n = `2'
local n2 = `n'+2
if `m'>`n' {
mat A = J(`m',3,.)
}
else {
mat A = J(`n',3,.)
}
//所有指标
global all_var $positive_var $negative_var
//年份
qui sum year
global min_year=r(min)
global max_year=r(max)
forvalues year=$min_year / $max_year{
use data.dta, clear
keep if year==`year'
//标准化数据 正向指标
foreach i in $positive_var {
qui sum `i'
gen x_`i'=(`i'-r(min))/(r(max)-r(min))
replace x_`i'=0.00001 if x_`i'==0
}
//标准化数据 负向指标
foreach i in $negative_var {
qui sum `i'
gen x_`i'=(r(max)-`i')/(r(max)-r(min))
replace x_`i'=0.00001 if x_`i'==0
}
//
forvalues i = 3/`n2' {
local j = `i'-2
capt drop bss`j'
ge bss`j' = `x_`i''
su bss`j'
ge bs`j' = bss`j'/r(sum)
}
***********未进行分年进行整体熵值法********888
//正向指标
global positive_var x1 x2 x3
//负向指标
global negative_var x4 x5
//标准化数据 正向指标
foreach i in $positive_var {
qui sum `i'
gen x_`i'=(`i'-r(min))/(r(max)-r(min))
replace x_`i'=0.00001 if x_`i'==0
}
//标准化数据 负向指标
foreach i in $negative_var {
qui sum `i'
gen x_`i'=(r(max)-`i')/(r(max)-r(min))
replace x_`i'=0.00001 if x_`i'==0
}
//计算各指标的比重
global positive_var x_x1 x_x2 x_x3
global negative_var x_x4 x_x5
global all_var $positive_var $negative_var //所有指标
global all_var x_x1 x_x2 x_x3 x_x4 x_x5
foreach i in $all_var{
qui sum `i'
egen `i'_sum=sum(`i')
gen y_`i'=`i'/`i'_sum
}
//根据比重计算各分量的信息熵
gen n=_N
foreach i in $all_var {
gen y_lny_`i'=y_`i'*ln(y_`i')
}
//求和
global positive_var y_lny_x_x1 y_lny_x_x2 y_lny_x_x3
global negative_var y_lny_x_x4 y_lny_x_x5
global all_var $positive_var $negative_var //所有指标
foreach i in $all_var {
egen y_lny_`i'_sum=sum(`i')
}
//计算各指标的贡献总量
foreach i in $all_var {
gen E_`i'= -1/ln(n)*y_lny_`i'_sum
}
//计算各指标权重
foreach i in $all_var {
gen d_`i'= 1-E_`i'
}
egen d_sum = rowtotal(d_*)
foreach i in $all_var {
gen W_`i'= d_`i'/d_sum
}
//计算综合得分
foreach i in $all_var {
gen Score_`i'= `i'*W_`i'
}
egen Score=rowtotal(Score_*)
keep id year $all_var Score
save data_`year', replace
}