我正在使用调查数据集,其中每一行都是主题/观察。在其中一个数据列中,我有一个带有配偶ID的条目。我想将配偶的教育水平(即配偶排的数据录入)添加到另一位配偶的观察中 - 有关如何在Stata中做到这一点的任何建议吗?
答案 0 :(得分:1)
// create some example data
clear
input id spid educ
1 2 6
2 1 12
3 6 10
4 5 13
5 4 6
end
// create temporary file
tempfile original_data
save `original_data'
// prepare new file for merging
drop id
rename spid id
rename educ speduc
// merge
merge 1:1 id using `original_data'
// admire the result
list
// the master file is actually the file you created
// so you probably don't want to observations who only come from master
// _merge == 1
drop if _merge == 1
答案 1 :(得分:1)
在比较其他策略时,我发现merge
非常有效;所以Maarten的答案可能是最好的选择。但在这里我展示了另一种方法:循环观察(不可思议的是,在不到一周的时间内,这个问题或其变体在statalist.org和StackOverflow之间至少出现过三次)。
clear all
set more off
* ----- example data -----
input id spid educ // from maarten buis
1 2 6
2 1 12
3 6 10
4 5 13
5 4 6
end
list, sep(0)
*----- what you want -----
gen speduc = .
forvalues i = 1/`=_N' {
replace speduc = educ[`i'] if id[`i'] == spid
}
list, sep(0)
答案 2 :(得分:0)
@ Maarten的解决方案非常简洁有效。这是不使用merge
的替代方案。好处是它为每对夫妇创建了一个ID变量。
clear
// create some data and include cases without matches
input ID SPO_ID EDU
1 5 12
2 4 16
3 . 12
4 2 18
5 1 14
6 . 15
7 9 19
end
tempvar x y // unique IDs for non-missing cases
egen x=group(ID SPO_ID)
egen y=group(SPO_ID ID)
egen DYAD=rowmin(x y) // DYAD=> ID for each couple
sort DYAD
// distinguish within each DYAD; you can use sex/gender if given and all are heterosexual marriages
by DYAD: gen DYAD_ID=_n-1 if !missing(DYAD)
gen SPO_EDU=.
replace SPO_EDU=EDU[_n+1] if (DYAD_ID==0 & DYAD[_n]==DYAD[_n+1])
replace SPO_EDU=EDU[_n-1] if (DYAD_ID==1 & DYAD[_n]==DYAD[_n-1])
list
这是根据加州大学洛杉矶分校的page改编的。