如何在SAS中合并不等量数据集并重复单观测值至全量
解决SAS中单观测数据集与多观测数据集的全量匹配问题
当你直接使用merge语句合并单观测数据集df2和多观测数据集df1时,只会将df2的观测匹配到df1的第一行,其余行的目标变量会缺失。要实现df2的数值自动重复匹配到df1所有行,以下是几种适合自动化场景的解决方案:
方法1:RETAIN语句+SET循环组合
先读取单观测数据集并保留变量值,再循环读取多观测数据集的所有行,自动填充保留的变量值:
data df3; retain d; set df2; do until(eof_df1); set df1 end=eof_df1; output; end; run;
说明:retain d确保变量d的值在数据步循环中不会被重置,do until循环遍历df1的每一行并输出,实现全量匹配。
方法2:PROC SQL笛卡尔积
利用SQL的笛卡尔积特性,无需额外处理即可实现全量匹配,代码简洁高效:
proc sql; create table df3 as select df1.*, df2.d from df1, df2; quit;
说明:SQL会自动将df2的唯一行与df1的所有行进行无关联匹配,直接生成目标数据集。
方法3:带虚拟BY变量的MERGE语句
若坚持使用merge语法,可通过添加相同的虚拟BY变量实现全量匹配:
data df1_temp; set df1; by_var = 1; run; data df2_temp; set df2; by_var = 1; run; data df3; merge df1_temp df2_temp; by by_var; drop by_var; run;
说明:相同的虚拟BY变量会让merge将两个数据集的所有行按BY值合并,最后删除虚拟变量即可得到整洁的目标数据集。
以上三种方法均可生成你期望的结果:
a b c d 1 2 3 4 6 7 8 4 5 6 9 4
内容的提问来源于stack exchange,提问作者Mohamed Rahouma
相关产品推荐
相关产品推荐

