Stata替代查找

问题描述 投票:0回答:1

我有一个包含以下变量的大型Stata数据集:yearstatehousehold_idindividual_idpartner_idrace。以下是我的数据示例:

 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)

我现在要做的是创建类似vlookup在Excel中所做的事情:对于每一列,在本地保存id_partner,在id_user中找到它并找到它们的种族,并将其与原始用户的种族进行比较。

我想它应该是这样的?

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
stata
1个回答
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文件。

© www.soinside.com 2019 - 2024. All rights reserved.