-1

例如,在 SAS 中,我在数据集 A(左下方)中有 5 个 ID。有一个数据集 B,(可能包含一些 A 的 ID,右下方)。我需要在 A 和 B 上找到一个独特的组合(A 是主要结果数据集),性别相同,年龄范围在 5 以内,收入范围在 10000.Tt 内可能有很多 b.id 可以与 a.id 合并。但关键是,我只能使用一次 b.id。在这种情况下,101 与 106 合并,102 与 111,103 合并与 112,105 与 110 合并。抱歉,我很难描述我的问题。希望它足够清楚。谢谢!

ID  sex  age   income                 ID    sex    age   income
101  F    30    20000                 106    F      26    21000
102  M    20    10000                 102    M      20    10000
103  F    38    30000                 110    M      45    44000
104  M    55    35000                 111    M      19    14000
105  M    43    45000                 112    F      33    34000

结果

    ID_a  sex_a  age_a   income_a    ID_b    sex_b    age_b   income_b
      101  F    30    20000                 106    F      26    21000
      102  M    20    10000                 111    M      19    14000
      103  F    38    30000                 112    F      33    34000
      104  M    55    35000                 
      105  M    43    45000                 110    M      45    44000
4

3 回答 3

0
select a.Id, b.Id from SetA a
left join SetB b on a.sex = b.sex and 
a.age between b.age - 5 and b.age + 5 and 
a.income between b.income - 10000 and b.income + 10000
于 2015-05-13T13:49:26.923 回答
0

您应该能够使用此问题的答案中使用的技术进行模糊匹配,同时确保每个 b.id 只使用一次。

这个想法是将您的 B 数据集加载到一个临时数组/哈希对象中,这样您就可以在将其匹配到 A 时跟踪哪些 b.ids 已被使用。

于 2015-05-13T17:38:01.977 回答
-1
SELECT 
    A.ID, 
    B.ID
FROM lefttable A
INNER JOIN righttable B
ON (A.sex = B.sex) AND (A.age BETWEEN B.age -5 AND B.age + 5) AND (A.income BETWEEN B.income -10000 AND B.age + 10000)
于 2015-05-13T13:37:21.037 回答