如何创建一个基于 Stata 中关系列的新变量?

How can I create a new variable that is based on a relational column in Stata?

我的数据集是长格式的面板数据,包含以下列:id、var1、syear、partner_id

var1 是与具有相应 id

的人相关的兴趣值

partner_id是id

定义的人的伴侣(例如妻子或丈夫)的ID

现在我想创建一个新变量 var2,它采用每个 ID 和年份的人的合作伙伴的值(来自 var1)。

当对非面板数据使用下面的建议代码时(感谢@Nick-Cox) var2 结果如下:

但我需要它是这样的:

由于我之前没有任何 Stata 经验,非常感谢您的帮助!

所以这是作为代码的简化数据(如果这很重要:在我的原始数据集中,多年来有更多的年份,有时不同的合作伙伴以及缺失;例如,当有一年没有合作伙伴时):

id syear var1 partner_id
1 2000 1000 2 
1 2001 2000 2
2 2000 3000 1
2 2001 4000 1 

考虑一下您首次发布的数据和问题的渲染(请注意,将数据呈现为图像不如将数据呈现为代码有用):

* Example generated by -dataex-. To install: ssc install dataex
clear
input float(id var1 partner_id var2)
1  5000 4  3000
2  2000 1  5000
3  1000 5 10000
4  3000 2  2000
5 10000 3  1000
end

gen wanted = var1[partner_id]

assert wanted == var2

编辑现在考虑将此解决方案用于修改后的数据。修改后的数据示例可能看似简单,只有两个标识符,它们是彼此的伙伴,对于这些简单的代码就足够了。但是,我写了更通用的代码。

* Example generated by -dataex-. To install: ssc install dataex
clear
input byte id int syear float var1 byte partner_id
1 2000 1000 2
1 2001 2000 2
2 2000 3000 1
2 2001 4000 1
end

save orig, replace 

keep id var1 syear 
rename (id var1) (partner_id wanted)
merge 1:1 partner_id syear using orig

sort id syear 

list 

     +-----------------------------------------------------+
     | partne~d   syear   wanted   id   var1        _merge |
     |-----------------------------------------------------|
  1. |        2    2000     3000    1   1000   matched (3) |
  2. |        2    2001     4000    1   2000   matched (3) |
  3. |        1    2000     1000    2   3000   matched (3) |
  4. |        1    2001     2000    2   4000   matched (3) |
     +-----------------------------------------------------+