用于查找的Stata替代方案
我有一个包含以下变量的大型Stata数据集:用于查找的Stata替代方案,stata,Stata,我有一个包含以下变量的大型Stata数据集:年份,州,家庭id,个人id,伴侣id,以及种族。以下是我的数据示例: year state household_id individual_id partner_id race 1980 CA 23 2 1 3 1980 CA 23 1 2 1 1990 NY 43
年份
,州
,家庭id
,个人id
,伴侣id
,以及种族
。以下是我的数据示例:
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
请注意,在上表中,第1列和第2列相互结合。
我想创建一个变量,如果一个人是跨种族婚姻的话
作为第一步,我使用了以下代码
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中的vlookup
的东西:对于每个列,在本地保存id\u合作伙伴,在id\u用户中找到它,找到他们的种族,并将其与原始用户的种族进行比较
我想应该是这样的
gen inter2==1 if (find race[idpartner]) == (race[iduser])
预期的输出应该是这样的
year state household_id individual_id partner_id race inter2
1980 CA 23 2 1 3 1
1980 CA 23 1 2 1 1
1990 NY 43 4 2 1 0
1990 NY 43 2 4 1 0
我想你不需要这么笼统的东西。正如您所意识到的,关于标识符的信息足以找到情侣,而这反过来又允许对每对情侣中的人进行
种族的比较
在下面的代码中,\u 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 |
+-------------------------------------------------------------------------------------+
清除
输入年份str2州住户身份证个人身份证合作伙伴身份证种族
1980年CA 23 2 1 3
1980年CA 23 1 2 1
1990年纽约43421
1990年纽约43 2 4 1
结束
生成偶id=cond(个体id<伙伴id,字符串(个体id)+///
“”+字符串(合作伙伴id),字符串(合作伙伴id)+///
“”+字符串(单个\u id))
bysort state year household\u id夫妇\u id:generate mixed=种族[1]!=如果_N==2,则为竞赛[2]
列表,sepby(住户id)缩写(15)
+-------------------------------------------------------------------------------------+
|年份州家庭\身份证个人\身份证伴侣\身份证种族夫妇\身份证混合|
|-------------------------------------------------------------------------------------|
1. | 1980年CA 23 2 1 3 1 2 1|
2. | 1980年加利福尼亚州23121|
|-------------------------------------------------------------------------------------|
3. | 1990年纽约4342140|
4. | 1990年纽约州43 2 4 1 2 4 0|
+-------------------------------------------------------------------------------------+
这一想法记录在。该链接允许免费访问pdf
文件 感谢您提供的数据示例,但是dataex
比您做的更进一步,让每个阅读线程代码的人在自己的状态中复制示例数据。