在Stata中随机输入缺失的协变量
我正试图使用Stata随机估算几个协变量的缺失数据。我从未这样做过,我试图使用一位前员工的代码:在Stata中随机输入缺失的协变量,stata,Stata,我正试图使用Stata随机估算几个协变量的缺失数据。我从未这样做过,我试图使用一位前员工的代码: local covarall calc_age educcat ipovcat_bl US_born alc_yn2 drug_yn lnlpcbsum tot_iod local num = 0 foreach j of local covarall { gen iflag_`j'=0 replace iflag_`j'=1 if `j'==. local num = `
local covarall calc_age educcat ipovcat_bl US_born alc_yn2 drug_yn lnlpcbsum tot_iod
local num = 0
foreach j of local covarall {
gen iflag_`j'=0
replace iflag_`j'=1 if `j'==.
local num = `num'+1000
forvalues i = 1/476 {
sort `j'
count if `j'==.
di r(N)
local num2 = `num'+`i'
set seed `num2'
replace `j' in `i'=`j'[1+int((400-r(N))*runiform())] if iflag_`j'[`i']==1
}
}
当我运行这个时,Stata会一遍又一遍地给我这个:
(0 real changes made)
0
0
我做错了什么 这三条信息似乎可以解释如下:
replace iflag_`j' = 1 if `j' == .
当出现这种情况时,将产生一条信息(0实际更改)
,这意味着所讨论的变量永远不等于系统缺失,即更换要求
count if `j' == .
将导致在相同情况下显示0
di r(N)
同上<代码>计数默认显示结果,然后代码坚持再次显示。奇怪的风格,但不是一个错误
所有这些都说明了这一点
replace `j' in `i'=`j'[1+int((400-r(N))*runiform())] if iflag_`j'[`i'] == 1
这是相当违法的。我最好的猜测是,不知何故,你把它复制错了,它本应该被复制的
replace `j' =`j'[1+int((400-r(N))*runiform())] in `i' if iflag_`j'[`i'] == 1
但是,如果没有丢失值,那么这也应该产生与第一个相同的消息
我补充说,如果变量中没有缺失值,那么进入最里面的循环是毫无意义的:这样就没有什么可插补的了
每次更换种子都很奇怪,但这在一定程度上取决于口味 试着从一些小的开始。现在稍微扩展一下,检查结果。重复这些步骤,直到实现完全正常工作为止。大多数情况下,软件开发不是一门精确的科学,而是反复试验,特别是如果您对语言/库/框架不熟悉。如果您要分析这些插补数据,我建议您使用Stata的多重插补(MI)命令。如果你想得到正确反映插补间和插补内变异性的标准误差,你就需要它们。