我有一个很大的Stata数据集,其中包含以下变量:year
,state
,household_id
,individual_id
,partner_id
和{{1} }。这是我的数据示例:
race
请注意,在上表中,第1列和第2列相互结合。 我想创建一个变量,如果该人是异族通婚,则该变量为1。
第一步,我使用了以下代码
year state household_id individual_id partner_id race
1980 CA 23 2 1 3
1980 CA 23 1 2 1
1990 NY 43 4 2 1
1990 NY 43 2 4 1
此代码运行良好,但在某些情况下给出了错误的结果。作为替代方案,我使用
创建了一个字符串变量来标识每个用户及其伙伴。by household_id year: gen inter=0 if race==race[partner_id]
replace inter=1 if inter==.
我现在想要做的是创建 gen id_user=string(household_id)+"."+string(individual_id)+string(year)
gen id_partner=string(household_id)+"."+string(partner_id)+string(year)
在Excel中的操作:对于每一列,将id_partner保存在本地,在id_user中找到它并查找他们的种族,并将其与原始用户。
我猜应该是这样的吗?
vlookup
预期输出应为
gen inter2==1 if (find race[idpartner]) == (race[iduser])
答案 0 :(得分:2)
我认为您不需要任何一般性的要求。如您所知,有关标识符的信息足以找到夫妻,这反过来又可以比较每对夫妻中的人race
。
在_N == 2
下面的代码中,是为了捕获数据错误,例如一个伙伴,但另一个不是数据集中的观察值,或者一个伙伴的重复或两者兼而有之。
clear
input year str2 state household_id individual_id partner_id race
1980 CA 23 2 1 3
1980 CA 23 1 2 1
1990 NY 43 4 2 1
1990 NY 43 2 4 1
end
generate couple_id = cond(individual_id < partner_id, string(individual_id) + ///
" " + string(partner_id), string(partner_id) + ///
" " + string(individual_id))
bysort state year household_id couple_id : generate mixed = race[1] != race[2] if _N == 2
list, sepby(household_id) abbreviate(15)
+-------------------------------------------------------------------------------------+
| year state household_id individual_id partner_id race couple_id mixed |
|-------------------------------------------------------------------------------------|
1. | 1980 CA 23 2 1 3 1 2 1 |
2. | 1980 CA 23 1 2 1 1 2 1 |
|-------------------------------------------------------------------------------------|
3. | 1990 NY 43 4 2 1 2 4 0 |
4. | 1990 NY 43 2 4 1 2 4 0 |
+-------------------------------------------------------------------------------------+
此想法记录在this article中。该链接可免费访问pdf
文件。