从个人使用经验来看,stata使用起来更简单,并且在do文档中能快速便捷找到所存在问题。
具体来说操作步骤如下:
xtset id year
****标准化-正向指标********
global all_var x2 x3 x4 x5 x6 x7 x9 x10 x14 x15 x16 x19
foreach i in $all_var{
egen min_`i'=min(`i')
egen max_`i'=max(`i')
gen s`i'=(`i'-min_`i')/(max_`i'-min_`i') //正向指标
replace s`i'=0.0001 if s`i'==0
}
*****标准化-负向指标****
global neg_var x1 x8 x11 x12 x13 x17 x18
foreach i in $neg_var{
egen min_`i'=min(`i')
egen max_`i'=max(`i')
gen s`i'=(max_`i'-`i')/(max_`i'-min_`i') //正向指标
replace s`i'=0.0001 if s`i'==0
}
order id year x* min* max* s*
****p值********
forvalue i=1(1)19{
egen sums_`i'=sum(sx`i')
gen p`i'=sx`i'/sums_`i'
}
order id year x* min* max* s* sums* p*
****e/d********
forvalue i=1(1)19{
egen l`i'=sum(p`i'*ln(p`i'))
gen e`i'=-l`i'/ln(3) //obs的个数,数据拉到底就知道了
gen d`i'=1-e`i'
}
order id year x* min* max* s* sums* p* l* e* d*
//求权重w-----------------------------------------------------------------------
forvalue i=1(1)19{
egen f`i'=rowtotal(d*)
gen w`i'=d`i'/f`i'
} //w就是权重