You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PROC SQL/SAS中基于特定列条件合并两个数据集?

问题描述

我拥有两个数据集table_A和table_B,结构与数据如下所示。需要基于特定列条件正确合并得到目标输出,但直接执行连接操作的结果不符合预期。请提供SAS或PROC SQL的实现方法。

table_A

user_cditem_nbrproduct_cdpart_cdline_grpfrom_geoto_geobetween_geo
0125525854147129ALAZ
0125525854147129PR
0125525854147129WA
0125525854147129NV
0125525854147230NYNJ
0125525854147230PA
0399999922222160WYAZ
0399999922222160TXTX
0399999922222160CA
0399999922222299NJ
0399999922222299CA
0399999922222299ND

table_B

user_cditem_nbrproduct_cdpart_cdline_grpoprtr_cdoprtr_typnum_valuezone_azone_bzone_c
0125525854147129A$140TRN11
0125525854147129B%15TRN11
0125525854147129C%15TRN11
0125525854147129A$200TRN12
0125525854147129B%25TRN12
0125525854147129C%25TRN12
0125525854147129A$175TRN25
0125525854147129B%33TRN25
0125525854147129C%38TRN25
0125525854147230A$140PQR371
0125525854147230B%15PQR371
0125525854147230C%15PQR371
0125525854147230A$200PQR418
0125525854147230B%25PQR418
0125525854147230C%25PQR418
0399999922222160A$100TRN11
0399999922222160B%15TRN11
0399999922222160C%27TRN11
0399999922222160A$100ABC12
0399999922222160B%15ABC12
0399999922222160C%27ABC12
0399999922222299A$100TRN11
0399999922222299B%15TRN11
0399999922222299C%27TRN11
0399999922222299A$100ABC12
0399999922222299B%15ABC12
0399999922222299C%27ABC12

解决方案

1. SAS 数据步实现

先按分组键对两个数据集排序,再通过一对一合并(按分组键),确保每个table_A的行匹配对应分组的所有table_B行:

/* 对table_A和table_B按分组列排序 */
proc sort data=table_A;
    by user_cd item_nbr product_cd part_cd line_grp;
run;

proc sort data=table_B;
    by user_cd item_nbr product_cd part_cd line_grp;
run;

/* 合并数据集 */
data final_table;
    merge table_A table_B;
    by user_cd item_nbr product_cd part_cd line_grp;
run;

2. PROC SQL 实现

通过内连接,指定分组列作为连接条件,确保每个table_A的行与同分组的所有table_B行匹配:

proc sql;
    create table final_table as
    select a.*, b.oprtr_cd, b.oprtr_typ, b.num_value, b.zone_a, b.zone_b, b.zone_c
    from table_A a
    inner join table_B b
    on a.user_cd = b.user_cd
        and a.item_nbr = b.item_nbr
        and a.product_cd = b.product_cd
        and a.part_cd = b.part_cd
        and a.line_grp = b.line_grp;
quit;

这两种方法都能确保table_A中同一分组(user_cd/item_nbr/product_cd/part_cd/line_grp)的每一行,都匹配table_B中对应分组的所有行,从而得到符合预期的合并结果。

内容的提问来源于stack exchange,提问作者Rogue258

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 01:07:03