Stata:如果数据设置为mi,则重新调整宽数据

时间:2015-10-19 15:58:20

标签: stata reshape

我的数据是长格式的,带有个人标识符和年份标识符。 它是来自不同数据集的合并和附加数据文件。

编辑: 我的目标是重塑它以对来自一年的所有观察结果进行回归,并使用前几年的变量。 我的目标不是能够使用任何mi命令。

这是我的重塑代码:

use "${DATA_PATH}HViD_SOEP_rev_dum.dta"

* save all variable-names
quietly describe, varlist
local all_vars = r(varlist) 
display "`all_vars'"
 ** reshape **
foreach var in `all_vars'{
    display "`var'"
    * no reshape for pid, hid, syear and ypnat 
    if `var' == "pid" | `var' == "hid" | `var' == "syear" | `var' == "ypnat*" {
        * do nothing
    }
    else{
        * reshape 
        reshape wide `var', i(pid) j(syear)
    }
}

我得到了回报

  

无;数据是mi设定的   使用mi reshape对这些数据执行重塑。 mi reshape与reshape具有相同的语法。    也许你没有输入重塑。在这种情况下,您键入的命令将重新整形,并且不适合与mi数据一起使用。使用mi extract或mi xeq选择要运行命令的数据,可能是m = 0

在stata-manual中读到:

  

mi unset是一个很少使用的命令来取消设置数据。更好的替代品包括mi提取物和   mi export(分别参见[MI] mi extract和[MI] mi export)。

我尝试mi extract = 0,建议here。 但回报是

  

语法错误       找到m = 0#expected

我也试过mi reshape wide var',i(pid)j(syear)`。其中解决了

  

mi reshape wide pgtatzt,i(pid)j(syear)   (推算变量brutto1 brutto2 hinc imo geld betr netw erbey未注册,因为不在m = 0)   _mi_miss未找到

所以,现在我的选择非常好。我不知道在哪里可以找到mi_miss变量,因为它不在原始数据中。

我不想将我的数据导出到csv文件,因为这会导致我的标签丢失。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这是尝试基于"简单示例"复制已发布的解决方案。在Stata MI手册的第18-20页。为此,我删除了变量_mi_miss,这是mi reshape命令失败的原因。 可以看出,应用代码的结果不是接受mi命令的适当大小的数据集。请根据此示例发布解决方案的工作版本。 修改我添加了一个命令,该命令可能只会在插补之前恢复原始数据集。这假设变量计数器变量_mi_m仍在数据集中。

use http://www.stata-press.com/data/r14/mheart5, clear
mi set mlong
mi register imputed age bmi
set seed 29390
mi impute mvn age bmi = attack smokes hsgrad female, add(10)

/* Replicate Post Problem */
drop _mi_miss
save  green_yellow, replace
sum attack smokes _mi*
export delimited unset.csv, nolabel quote replace
clear
import delimited unset.csv, clear
cf _all using green_yellow
keep if _mim_m==0   // ADDED
save unset, replace

答案 1 :(得分:0)

感谢大家的时间,并认为你已经解决了这个问题。 我会回答我的问题,因为我发现至少有一种解决方法。我知道我的问题非常具体。无论如何,imho,this is the best way to solve the question

最初的想法来自statalist

我将mi设置数据导出到.csv并确保标记的变量不是作为整数导出而是作为值导出。 然后我重新导入数据到stata。生成的文件不再设置为mi。 通过将此数据附加到我的其余数据,我重新获得了目标文件,但这次不是mi设置。 我确保重新导入的文件不是主文件,而是附加时使用的文件。 因此,主文件中的标签将扩展到最终文件。 这是我的导出和重新导入代码:

* load data *
use "${DATA_PATH}HViD_green_yellow.dta"

*** export data to .csv ***  
/* 
NOTE: instead of labels the numeric values are saved! This is important to 
ensure that the reimported dataset will be compatabile with SOEP-data.  
All strings are in double quotes: ""
*/
export delimited using "${DATA_PATH}HViD_miunset.csv", nolabel quote replace

clear  

*** import data ***
import delimited "${DATA_PATH}HViD_miunset.csv"

*** check data for integrity **
cf _all using "${DATA_PATH}HViD_green_yellow.dta"

*** save data ***
save "${DATA_PATH}HViD_miunset.dta"