我的数据集是具有以下列的长格式面板数据: id、var1、syear、partner_id
var1是与具有各自id的人相关的兴趣值
partner_id是由ID定义的人的伴侣(例如妻子或丈夫)的id
现在,我想创建一个新的变量var2,它接受(来自var1的)每个id & year的人员的合作伙伴的值。
当对非面板数据使用下面的建议代码(thx to @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 发布于 2021-03-03 02:36:57
考虑一下您第一次发布的数据和问题的呈现(请注意,将数据表示为图像不如将数据表示为代码):
* 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) |
+-----------------------------------------------------+https://stackoverflow.com/questions/66442626
复制相似问题