Stata 将提名与其代码匹配

Stata 将提名与其代码匹配,stata,social-networking,network-analysis,Stata,Social Networking,Network Analysis,我正在进行网络分析,我有一个类似这样的数据集 **ID-code | ego | alter1 |alter2 |alter3 |Office** 100 | JHON | ROCKY |JOE |MOLLY | 1 101 |ROCKY | JOE |MOLLY |JHON | 1 102 | JOE | MOLLY |JHON | . | 1 103 | MOLLY| ROC

我正在进行网络分析,我有一个类似这样的数据集

**ID-code | ego  |  alter1  |alter2 |alter3 |Office**
100       | JHON |  ROCKY   |JOE    |MOLLY  |   1
101       |ROCKY |  JOE     |MOLLY  |JHON   |   1
102       | JOE  |  MOLLY   |JHON   |  .    |   1
103       | MOLLY|  ROCKY   | .     |  .    |   1 
   **ID-code ego|   ID_alter1   |ID_alter2  |ID_alter3**
    100JHON     |    101ROCKY   |102JOE     |103MOLLY
    101ROCKY    |    102JOE     |103MOLLY   |100JHON
    102JOE      |    103MOLLY   |100JHON    |    .
    103MOLLY    |    101ROCKY   |  .        |    .
正如你所见,每个小我都被要求说出同一办公室最多三个改变的名字

我希望将ID代码与它们的名称匹配,以便获得类似这样的新变量/列

**ID-code | ego  |  alter1  |alter2 |alter3 |Office**
100       | JHON |  ROCKY   |JOE    |MOLLY  |   1
101       |ROCKY |  JOE     |MOLLY  |JHON   |   1
102       | JOE  |  MOLLY   |JHON   |  .    |   1
103       | MOLLY|  ROCKY   | .     |  .    |   1 
   **ID-code ego|   ID_alter1   |ID_alter2  |ID_alter3**
    100JHON     |    101ROCKY   |102JOE     |103MOLLY
    101ROCKY    |    102JOE     |103MOLLY   |100JHON
    102JOE      |    103MOLLY   |100JHON    |    .
    103MOLLY    |    101ROCKY   |  .        |    .
我已经知道如何获取变量ID代码ego:

*egen ID code ego=concat(ID code ego)*

但我不知道如何将其他观察结果与它们的ID代码相匹配

欢迎提出任何建议

谢谢,
Amedeo

凯文·克劳(Kevin Crow)写了一个vlookup克隆人,使这一过程变得非常简单:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3
100 "JOHN" "ROCKY" "JOE" "MOLLY"
101 "ROCKY" "JOE" "MOLLY" "JOHN"
102 "JOE" "MOLLY" "JOHN" ""
103 "MOLLY" "ROCKY" "" ""
end
capture net install vlookup, from(http://www.stata.com/users/kcrow)
gen id_code_ego = string(id) + ego
forvalues i=1/3 {
    vlookup alter`i', gen(code) key(ego) value(id_code)
    gen id_alter`i' = string(code) + alter`i'
    drop alter`i' code
}
drop id_code ego

增编:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3 int officer
100 "JOHN" "ROCKY" "JOE" "MOLLY" 1
101 "ROCKY" "JOE" "MOLLY" "JOHN" 1
102 "JOE" "MOLLY" "JOHN" "" 1
103 "MOLLY" "ROCKY" "" "" 1
103 "JOHN" "ROCKY" "JOE" "MOLLY" 2
102 "ROCKY" "JOE" "MOLLY" "JOHN" 2
101 "JOE" "MOLLY" "JOHN" "" 2
100 "MOLLY" "ROCKY" "" "" 2
end
capture net install vlookup, from(http://www.stata.com/users/kcrow)

gen id_code_ego_officer = string(id) + ego + string(officer)
gen ego_officer = ego + string(office)

forvalues i=1/3 {
    replace alter`i'= alter`i' + string(officer) 
    vlookup alter`i', gen(code) key(ego_officer) value(id_code)
    gen id_alter`i' = string(code) + alter`i'
    replace id_alter`i' = regexr(id_alter`i',"[0-9]?$","")
    drop alter`i' code  
}

drop id_code_ego_officer ego_officer

Kevin Crow写了一个vlookup克隆,这使得这非常容易:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3
100 "JOHN" "ROCKY" "JOE" "MOLLY"
101 "ROCKY" "JOE" "MOLLY" "JOHN"
102 "JOE" "MOLLY" "JOHN" ""
103 "MOLLY" "ROCKY" "" ""
end
capture net install vlookup, from(http://www.stata.com/users/kcrow)
gen id_code_ego = string(id) + ego
forvalues i=1/3 {
    vlookup alter`i', gen(code) key(ego) value(id_code)
    gen id_alter`i' = string(code) + alter`i'
    drop alter`i' code
}
drop id_code ego

增编:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3 int officer
100 "JOHN" "ROCKY" "JOE" "MOLLY" 1
101 "ROCKY" "JOE" "MOLLY" "JOHN" 1
102 "JOE" "MOLLY" "JOHN" "" 1
103 "MOLLY" "ROCKY" "" "" 1
103 "JOHN" "ROCKY" "JOE" "MOLLY" 2
102 "ROCKY" "JOE" "MOLLY" "JOHN" 2
101 "JOE" "MOLLY" "JOHN" "" 2
100 "MOLLY" "ROCKY" "" "" 2
end
capture net install vlookup, from(http://www.stata.com/users/kcrow)

gen id_code_ego_officer = string(id) + ego + string(officer)
gen ego_officer = ego + string(office)

forvalues i=1/3 {
    replace alter`i'= alter`i' + string(officer) 
    vlookup alter`i', gen(code) key(ego_officer) value(id_code)
    gen id_alter`i' = string(code) + alter`i'
    replace id_alter`i' = regexr(id_alter`i',"[0-9]?$","")
    drop alter`i' code  
}

drop id_code_ego_officer ego_officer

为了匹配其他观测值,Stata中的典型方法是使用
merge
。在第一步中,您创建一个每个办公室的不同自我价值观的主列表。然后返回原始数据并将每个alter与不同的办公室名称合并。执行合并需要一些变量名重命名:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3 int office
100 "JOHN" "ROCKY" "JOE" "MOLLY" 1
101 "ROCKY" "JOE" "MOLLY" "JOHN" 1
102 "JOE" "MOLLY" "JOHN" "" 1
103 "MOLLY" "ROCKY" "" "" 1
103 "JOHN" "ROCKY" "JOE" "MOLLY" 2
102 "ROCKY" "JOE" "MOLLY" "JOHN" 2
101 "JOE" "MOLLY" "JOHN" "" 2
100 "MOLLY" "ROCKY" "" "" 2
end

* make a master list of unique id/name per office
preserve
keep office id_code ego
isid office id_code ego, sort
rename (id_code ego) (id0 ego0)
save "match_egos.dta", replace
restore

* combine the id/ego for each observation
gen ID_ego = string(id_code) + ego

* loop over each alter and merge with the master list
forvalues i = 1/3 {
    clonevar ego0 = alter`i'
    merge m:1 office ego0 using "match_egos.dta", keep(master match) nogen
    gen ID_alter`i' = string(id0) + alter`i'
    drop ego0 id0
}

isid office id_code ego, sort
* leftalign is from SSC; to install, type in Command window: ssc install left align
leftalign
list ID_*, sepby(office)

为了匹配其他观测值,Stata中的典型方法是使用
merge
。在第一步中,您创建一个每个办公室的不同自我价值观的主列表。然后返回原始数据并将每个alter与不同的办公室名称合并。执行合并需要一些变量名重命名:

clear
input int id_code str5 ego str5 alter1 str5 alter2 str5 alter3 int office
100 "JOHN" "ROCKY" "JOE" "MOLLY" 1
101 "ROCKY" "JOE" "MOLLY" "JOHN" 1
102 "JOE" "MOLLY" "JOHN" "" 1
103 "MOLLY" "ROCKY" "" "" 1
103 "JOHN" "ROCKY" "JOE" "MOLLY" 2
102 "ROCKY" "JOE" "MOLLY" "JOHN" 2
101 "JOE" "MOLLY" "JOHN" "" 2
100 "MOLLY" "ROCKY" "" "" 2
end

* make a master list of unique id/name per office
preserve
keep office id_code ego
isid office id_code ego, sort
rename (id_code ego) (id0 ego0)
save "match_egos.dta", replace
restore

* combine the id/ego for each observation
gen ID_ego = string(id_code) + ego

* loop over each alter and merge with the master list
forvalues i = 1/3 {
    clonevar ego0 = alter`i'
    merge m:1 office ego0 using "match_egos.dta", keep(master match) nogen
    gen ID_alter`i' = string(id0) + alter`i'
    drop ego0 id0
}

isid office id_code ego, sort
* leftalign is from SSC; to install, type in Command window: ssc install left align
leftalign
list ID_*, sepby(office)

亲爱的迪米特里。非常感谢你的帮助。因为我的列表中有同名的主题,所以出现错误**“Id代码在ego中是唯一的;ego中有多个Id代码不同的观察结果。”**因此,我想指定为每个办公室运行命令(您可以在第一个表中看到变量office)。在办公室里,我没有双重的名字。我试过使用
bys office:
,但vlookup不接受
by
命令。@Amedeo这是一个关键细节,您的原始问题中没有提到。解决办法是重新定义具体的官员。对不起,我认为这很清楚,因为表中有变量,我说这些变量来自同一个办公室。我的错误。此外,我不知道vlookup不接受by命令,谢谢你的帮助Dimitriaydear Dimitry。非常感谢你的帮助。因为我的列表中有同名的主题,所以出现错误**“Id代码在ego中是唯一的;ego中有多个Id代码不同的观察结果。”**因此,我想指定为每个办公室运行命令(您可以在第一个表中看到变量office)。在办公室里,我没有双重的名字。我试过使用
bys office:
,但vlookup不接受
by
命令。@Amedeo这是一个关键细节,您的原始问题中没有提到。解决办法是重新定义具体的官员。对不起,我认为这很清楚,因为表中有变量,我说这些变量来自同一个办公室。我的错误。此外,我不知道vlookup不接受by命令,谢谢你的帮助Dimitry