在两个重叠数据集中选择唯一组合

时间:2015-05-13 13:25:07

标签: sql join sas combinations datastep

例如,在SAS中,我在数据集A(左下方)中有5个ID。有一个数据集B,(可能包含一些A的ID,在右下方)。我需要的是找到一个独特的组合(A是主要结果数据集)A和B有相同的性别,年龄范围在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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

我们的想法是将您的B数据集加载到临时数组/哈希对象中,这样您就可以跟踪在将它们匹配到A时已经使用过的b.ids。

答案 2 :(得分:-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)