Stata альтернативы для поиска - PullRequest
0 голосов
/ 22 апреля 2019

У меня большой набор данных Stata, который содержит следующие переменные: year, state, household_id, individual_id, partner_id и race. Вот пример моих данных:

 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

1 Ответ

2 голосов
/ 23 апреля 2019

Не думаю, что вам нужно что-то столь общее.Как вы понимаете, информации об идентификаторах достаточно, чтобы найти пары, и это, в свою очередь, позволяет сравнивать 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 |
     +-------------------------------------------------------------------------------------+

Эта идея описана в этой статье .Ссылка дает бесплатный доступ к файлу pdf.

...