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

如何在SAS Base中按行列双条件合并两个数据集?

在SAS Base中实现数据集行与列的关联合并

当然可以实现你要的需求!你的场景核心是把宽格式的Dataset A(城市作为列名)转换为长格式,让城市名变成一个可用于匹配的变量,之后就能和Dataset B基于Part_code和City做精准关联了。

先明确下示例数据集的结构,方便理解:

Dataset A(宽表):

Part_codeMiamiLA
A_16000038000
A_25500042000

Dataset B(长表):

Part_codeCity
A_1Miami
A_1LA
A_2Miami

步骤1:将Dataset A转置为长表

用PROC TRANSPOSE把A中的城市列名提取为City变量,同时把对应列的值转成单独的行:

/* 转置宽表A为长表,自动将列名转为City变量 */
proc transpose data=Dataset_A out=Dataset_A_long(rename=(col1=Sales_Value)) name=City;
    by Part_code; /* 按Part_code分组,确保每个部件的城市数据都单独成行 */
    var Miami LA; /* 这里列出所有城市列;如果列数多,可用_NUM_(数值列)或_CHARACTER_(字符列)批量处理 */
run;

转置后的Dataset_A_long结构会变成:

Part_codeCitySales_Value
A_1Miami60000
A_1LA38000
A_2Miami55000
A_2LA42000

步骤2:合并Dataset B与转置后的A

用PROC SQL或者DATA步完成合并,匹配条件就是你提到的b.Part_code = a.Part_code和b.City = a.City:

方法1:PROC SQL(推荐,逻辑清晰)

proc sql;
    create table Merged_Result as
    select b.*, a.Sales_Value /* 保留B的所有字段,加上A中匹配的数值 */
    from Dataset_B as b
    left join Dataset_A_long as a
        on b.Part_code = a.Part_code
        and b.City = a.City; /* 同时匹配部件编码和城市 */
quit;
  • 用left join可以保留Dataset B的所有记录,即使A中没有对应匹配值(此时Sales_Value会显示为缺失);如果只需要两边都匹配的记录,换成inner join即可。

方法2:DATA步合并

/* 先按Part_code和City排序,确保合并顺序正确 */
proc sort data=Dataset_B;
    by Part_code City;
run;

proc sort data=Dataset_A_long;
    by Part_code City;
run;

/* 合并数据集 */
data Merged_Result;
    merge Dataset_B(in=b) Dataset_A_long(in=a);
    by Part_code City;
    if b; /* 保留Dataset B的所有记录,和left join效果一致 */
run;

额外处理:大小写或格式不一致的情况

如果Dataset B中的City值和A的列名存在大小写差异(比如B是"miami",A列是"Miami"),可以用upcase()函数统一格式,避免匹配失败:

/* 在PROC SQL中直接处理 */
proc sql;
    create table Merged_Result as
    select b.*, a.Sales_Value
    from Dataset_B as b
    left join Dataset_A_long as a
        on upcase(b.Part_code) = upcase(a.Part_code)
        and upcase(b.City) = upcase(a.City);
quit;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:38