如何在Stata中为多个变量同时构建dyads配对数据结构
Stata多变量面板转有向Dyads结构操作方案
你的原始数据是标准的「年份-个体」长面板格式,要生成同年度内所有个体两两配对的有向dyad(即同时保留id1→id2和id2→id1的配对),用Stata自带的joinby命令即可完成,不需要安装第三方外部包,多变量转换只需要修改变量列表,操作步骤如下:
具体操作代码
- 预处理原始数据,保存临时副本
* 确认数据按「年份+个体id」唯一识别,排序 isid Year id, sort * 把原始数据存为临时文件,供后续配对调用 tempfile raw_panel save `raw_panel'
- 重命名变量,完成同年度两两配对
* 把当前内存里的id、分析变量统一重命名为「目的地端」变量 * 注意:如果有多个要转换的变量,全部加到第一个括号里即可 rename (id Freedom) (id_dest Freedom_dest) * 按年份匹配,生成同一年份所有id的两两组合 joinby Year using `raw_panel' * 把匹配进来的原始变量重命名为「出发地端」变量 * 变量顺序和上一步rename的原始变量一一对应 rename (id Freedom) (id_origin Freedom_orig)
- 清洗整理结果
* 可选:删除id自身和自身配对的观测(一般dyad分析都不需要自配对) drop if id_origin == id_dest * 调整变量顺序,按年份、出发地id、目的地id排序 order Year id_origin id_dest Freedom_orig Freedom_dest sort Year id_origin id_dest
多变量转换说明
如果你需要同时对多个变量构建dyad格式(比如除了Freedom之外还有GDP、Population等变量),只需要修改两处rename命令的变量列表即可,不需要改动其他逻辑。举个例子:
假设原始变量为
Year id Freedom GDP Pop,两处rename修改为:* 第一步重命名目的地端变量 rename (id Freedom GDP Pop) (id_dest Freedom_dest GDP_dest Pop_dest) * 合并后重命名出发地端变量 rename (id Freedom GDP Pop) (id_origin Freedom_orig GDP_orig Pop_orig)最后调整
order命令里的变量顺序即可。
结果校验
如果你的原始数据是T个年份、N个个体的平衡面板,删除自配对后最终生成的观测总数应为 T * N * (N-1)。以你给出的示例为例:2个id、12个年份(2005-2016),最终会生成24条观测,正好对应每个年份下1→2、2→1两条配对,和你期望的输出格式完全一致。
该方法对id的格式没有要求,无论id是连续数值、非连续数值还是字符串,都可以正常运行。
内容的提问来源于stack exchange,提问作者Giacomo DiPasquale
相关产品推荐
相关产品推荐

