|
**保留四位小数
forvalues i = 2012/2021 {
use "E:\data.dta"
preserve
quietly keep if year == `i'
* 1. 检查数据是否存在
qui count
local obs_count = r(N)
if `obs_count' == 0 {
display "Year `i': 无观测值"
restore
continue
}
* 2. 检查变量有效性
qui sum NQ
if r(sd) == 0 {
display "Year `i': NQ无变异(常数值 = " r(mean) ")"
restore
continue
}
* 3. 计算Moran's I
capture noisily spatgsa NQ, weights(w1) moran twotail
if _rc != 0 {
display "Year `i': 计算失败(请检查权重矩阵)"
restore
continue
}
* 4. 提取结果(兼容所有Stata版本)
local moran_i = cond(!mi(r(moran_i)), r(moran_i), r(Moran)[1,1])
local p_value = cond(!mi(r(p_z)), r(p_z), r(Moran)[1,5])
* 5. 格式化输出
display "Year `i':"
display " Moran's I = " %8.4f `moran_i' _col(25) "P-value = " %8.4f `p_value'
display " Obs = " `obs_count'
display "------------------------------------"
restore
}
|