我有一个数据集,允许链接朋友(即观察同伴群组),从而可以观察到个人朋友的特征。我所拥有的是一个8位数的标识符,id,每个id的朋友id(最多10个朋友),然后是许多特征变量。
我想接受一个人并创建一个变量,这些变量是每个朋友的外国出生状态。
如果外国出生,我已经有一个每个人的指标为1。以下是一个小例子,仅供一位朋友使用。请注意,MF1
表示男性朋友1,然后MF1id
表示男性朋友1的身份证号码。受访者最多可列出5位男性朋友和5位女性朋友。
所以,我需要Stata查看MF1id
,然后将其与id列匹配,然后查看f_born以查找匹配的ID,最后输入f_born
的值返回到MF1f_born
下的原始ID。
编辑:我在解释数据结构方面表现不佳。我有一个横截面,所以每个唯一身份1观察。第1行是第一个8位数的id号,其中所有变量都在该行之后。重复的id号位于为每个人列出的朋友ID(例如mf1id)和id列之间。我希望这更清楚一点。
答案 0 :(得分:1)
vlookup
,这使得这类事情变得非常简单:
use http://www.ats.ucla.edu/stat/stata/faq/dyads, clear
drop team y
rename (rater ratee) (id mf1_id)
bys id: gen f_born = mod(id,2)==1
net install vlookup
vlookup mf1_id, gen(mf1f_born) key(id) value(f_born)
答案 1 :(得分:0)
所以,Dimitriy对vlookup的建议是完美的,除非它对我不起作用。在用我的数据集尝试vlookup之后,Dimitriy用于他的示例的UCLA数据和我创建的玩具数据集vlookup总是在程序试图将临时文件保存到我的临时文件夹时失败。下面是vlookup的程序。注意它设置tempfile文件,操作数据,然后保存文件。
*! version 1.0.0 KHC 16oct2003
program define vlookup, sortpreserve
version 8.0
syntax varname, Generate(name) Key(varname) Value(varname)
qui {
tempvar g k
egen `k' = group(`key')
egen `g' = group(`key' `value')
local k = `k'[_N]
local g = `g'[_N]
if `k' != `g' {
di in red "`value' is unique within `key';"
di in red /*
*/ "there are multiple observations with different `value'" /*
*/ " within `key'."
exit 9
}
preserve
tempvar g _merge
tempfile file
sort `key'
by `key' : keep if _n == 1
keep `key' `value'
sort `key'
rename `key' `varlist'
rename `value' `generate'
save `file', replace
restore
sort `varlist'
joinby `varlist' using `file', unmatched(master) _merge(`_merge')
drop `_merge'
}
end
exit

出于某种原因,Stata给了我一个错误,"无效的文件,"在保存`文件',替换点。我有一个受限制的数据集,需要将我的所有Stata临时文件指向一个非常特定的文件夹,该文件夹中有一个擦除程序经常扫描它。我不知道为什么这会产生问题,但也许是,我真的不知道。无论如何,我调整了vlookup程序,它似乎做了我现在需要的。
clear all
set more off
capture log close
input aid mf1aid fborn
1 2 1
2 1 1
3 5 0
4 2 0
5 1 0
6 4 0
7 6 1
8 2 .
9 1 0
10 8 1
end
program define justlinkit, sortpreserve
syntax varname, Generate(name) Key(varname) Value(name)
qui {
preserve
tempvar g _merge
sort `key'
by `key' : keep if _n ==1
keep `key' `value'
sort `key'
rename `key' `varlist'
rename `value' `generate'
save "Z:\Jonathan\created data sets\justlinkit program\fchara.dta",replace
restore
sort `varlist'
joinby `varlist' using "Z:\Jonathan\created data sets\justlinkit program\fchara.dta", unmatched(master) _merge(`_merge')
drop `_merge'
}
end
// set trace on
justlinkit mf1aid, gen(mf1_fborn) key(aid) value(fborn)
sort aid
list

嗯,这解决了我的问题。感谢所有回复的人,没有你,我不会想到这一点。