给定配偶ID,您如何将配偶数据附加到Stata中的主题数据行?

时间:2014-08-13 14:12:22

标签: stata

我正在使用调查数据集,其中每一行都是主题/观察。在其中一个数据列中,我有一个带有配偶ID的条目。我想将配偶的教育水平(即配偶排的数据录入)添加到另一位配偶的观察中 - 有关如何在Stata中做到这一点的任何建议吗?

3 个答案:

答案 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改编的。