我的数据的简化版本如下:
Own_Name Own_Position Year Boss_Name Boss_Position
John Director 2017 Tess Managing Director
Tess Lead Director 2017 Jim CEO
John Lead Director 2018 Jim CEO
Tess CFO 2018 Jim CEO
有关Own_Name
,Own_Position
和Year
的所有数据都存在(因此,Jim和其他任何人都会在Own_Name
和Boss_Name
等行中获得自己的行。 ),但有许多条目缺少Boss_Position (but not
Boss_Name`)。
因此,考虑到Boss_Position
和Boss_Name
,我正试图找到Year
的内容。如果我只需要提取一个观察结果,我就可以执行此操作(仅保留Own_Name
匹配Boss_Name
和Year
匹配的相关数据,并使用相应的Own_Position
),但我不确定最好的方法是在哪里循环查看Boss_Name
的所有缺失的观察结果,因为使用keep
似乎非常具有破坏性和耗时。
理想情况下,代码看起来像
replace Boss_Position = Own_Position[YearNameMatcher(Boss_Name Year)] if missing(Boss_Position)
其中YearNameMatcher
是执行我要求的功能,但我不确定如何最好地继续。
我也是Stata的新手,所以我可能没有意识到更明显的解决方案,尽管我尝试过没有成功的搜索。
答案 0 :(得分:1)
一种解决方案是生成一个单独的临时数据集,其中包含变量Boss_Name-Year
的唯一值,然后使用原始数据生成merge
此数据集。您可以使用您的数据尝试此代码:
snapshot save
keep if Boss_Position!=""
drop Own*
duplicates drop Year Boss_name, force
tempfile boss
save `boss'
snapshot restore 1
drop Boss_Position
merge m:1 Boss_Name Year using `boss'
snapshot erase _all
此代码假设配对值Boss_name
和Year
是唯一的。使用这种方法,您无需遍历所有缺失的观察结果。