Stata:如果数据是 mi 集,则重塑宽数据

Stata: reshape wide data if data is mi set

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

编辑: 我的目标是将其重塑为 运行 对一年所有观察结果的回归,以及前几年的变量。 我的目标不是能够使用任何 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)
    }
}

我得到 return

no; data are mi set Use mi reshape to perform reshape on these data. mi reshape has the same syntax as reshape. Perhaps you did not type reshape. In that case, the command you typed calls reshape and it is not appropriate for use with mi data. Use mi extract or mi xeq to select the data on which you want to run the command, which is probably m=0

在统计手册中写道:

mi unset is a rarely used command to unset the data. Better alternatives include mi extract and mi export (see [MI] mi extract and [MI] mi export, respectively).

我尝试了 mi extract = 0,推荐 here。 但是 return 是

syntax error m=0 found where # expected

我也尝试了 mi reshape widevar', i(pid) j(syear)`。已在

中解决

mi reshape wide pgtatzt, i(pid) j(syear) (imputed variables brutto1 brutto2 hinc imo geld betr netw erbey unregistered because not in m=0) _mi_miss not found

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

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

非常感谢任何帮助。

感谢大家抽出时间来解决这个问题。 我会回答我的问题,因为我至少找到了解决方法。我知道我的问题是一个非常具体的问题。无论如何,恕我直言,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"

这是根据 Stata MI 手册第 18-20 页的 "simple example" 复制 posted 解决方案的尝试。为此,我删除了变量 _mi_miss,这是您的 mi reshape 命令失败的原因。 可以看出,应用您的代码的结果不是一个可以接受 mi 命令的适当大小的数据集。请 post 基于此示例的解决方案的工作版本。 编辑 我添加了一个命令,它可能只恢复插补前的原始数据集。这假设变量 _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