在给定其他变量的值的情况下查找观察值

时间:2018-03-24 19:52:50

标签: search stata

我的数据的简化版本如下:

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_NameOwn_PositionYear的所有数据都存在(因此,Jim和其他任何人都会在Own_NameBoss_Name等行中获得自己的行。 ),但有许多条目缺少Boss_Position (but not Boss_Name`)。

因此,考虑到Boss_PositionBoss_Name,我正试图找到Year的内容。如果我只需要提取一个观察结果,我就可以执行此操作(仅保留Own_Name匹配Boss_NameYear匹配的相关数据,并使用相应的Own_Position),但我不确定最好的方法是在哪里循环查看Boss_Name的所有缺失的观察结果,因为使用keep似乎非常具有破坏性和耗时。

理想情况下,代码看起来像

replace Boss_Position = Own_Position[YearNameMatcher(Boss_Name  Year)] if missing(Boss_Position)

其中YearNameMatcher是执行我要求的功能,但我不确定如何最好地继续。

我也是Stata的新手,所以我可能没有意识到更明显的解决方案,尽管我尝试过没有成功的搜索。

1 个答案:

答案 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_nameYear是唯一的。使用这种方法,您无需遍历所有缺失的观察结果。