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

如何在SAS中基于另一数据集匹配primaryID与TypeID填充字段?

问题描述

我之前做过这个操作,按理说并不难……但现在完全想不起来该如何高效实现了。

我有两个数据集:

数据集1(Table 1)

primaryIDTypeID
1001A
1001B
1001C
1002B
1003C
1004A
1004C
1005B

数据集2(Table 2)

primaryIDvalueAvalueBvalueC
1001120.220.042
1002100.190.039
100390.180.036
1004140.30.062
100550.120.028

我需要在数据集1中新增一个字段(Value),取值为数据集2中匹配primaryID的行里与TypeID对应的值。

预期输出

primaryIDTypeIDValue
1001A12
1001B0.22
1001C0.042
1002B0.19
1003C0.036
1004A14
1004C0.062
1005B0.12

解决方案

方法1:SQL实现

通过JOIN关联两个表,结合CASE语句匹配TypeID对应的字段值:

SELECT 
    t1.primaryID,
    t1.TypeID,
    CASE t1.TypeID
        WHEN 'A' THEN t2.valueA
        WHEN 'B' THEN t2.valueB
        WHEN 'C' THEN t2.valueC
    END AS Value
FROM Table1 t1
JOIN Table2 t2 ON t1.primaryID = t2.primaryID;

如果TypeID类型较多,可改用动态SQL,但针对固定的A/B/C场景,上述语句高效且直接。

方法2:Python Pandas实现

基础实现(适合中小数据集)

先合并数据集,再通过apply提取对应字段值:

import pandas as pd

# 构造示例数据(实际可直接读取数据源)
table1 = pd.DataFrame({
    'primaryID': [1001,1001,1001,1002,1003,1004,1004,1005],
    'TypeID': ['A','B','C','B','C','A','C','B']
})

table2 = pd.DataFrame({
    'primaryID': [1001,1002,1003,1004,1005],
    'valueA': [12,10,9,14,5],
    'valueB': [0.22,0.19,0.18,0.3,0.12],
    'valueC': [0.042,0.039,0.036,0.062,0.028]
})

# 按primaryID合并数据
merged = table1.merge(table2, on='primaryID', how='left')
# 提取对应TypeID的Value
merged['Value'] = merged.apply(lambda row: row[f'value{row["TypeID"]}'], axis=1)
# 保留目标列
result = merged[['primaryID', 'TypeID', 'Value']]
print(result)

优化实现(适合大数据集)

用np.select替代apply,提升运行效率:

import pandas as pd
import numpy as np

# 合并数据步骤同上
merged = table1.merge(table2, on='primaryID', how='left')

# 定义匹配条件与对应取值
conditions = [
    merged['TypeID'] == 'A',
    merged['TypeID'] == 'B',
    merged['TypeID'] == 'C'
]
choices = [merged['valueA'], merged['valueB'], merged['valueC']]

merged['Value'] = np.select(conditions, choices)
result = merged[['primaryID', 'TypeID', 'Value']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:54:53