基于分类变量的相似性匹配观察

时间:2014-10-20 03:23:25

标签: sql regex sas datastep

我想知道,如果某人有一个很好的方法如何匹配基于分类(非序数)变量的两个观察。 我正在进行的练习是根据兴趣和其他(非序数或序数)分类变量的特征,将学员与导师进行匹配。

变量 可能的值

体育 “棒球”,“足球”,“篮球”(...)

婚姻状况 “单身,没有孩子”,“单身,年幼的孩子”,“已婚,没有孩子”,“已婚,年幼的孩子”,(...)

工作级别 1,2,3,4,5,6

行业 “零售”,“财务”,“批发”,(...)

如果任何变量对此人很重要,也有指标。据我所知,我可以强迫婚姻状况分为一两个序数变量,如(“单身”,“已婚”,“寡妇”)和(“没有孩子”,“小孩子”,“成年子女”)。但我不知道如何处理工业和体育,因为他们没有逻辑顺序。我的计划最初是使用聚类技术根据最短距离或给定点找到导师和被指导者之间的匹配。但这会忽略人们可以决定变量对他们是否重要的​​事实(“是”,“否”)。 现在,我想通过使用嵌套的IF语句对其进行强制逻辑,如果基于重要性和实际值存在完美匹配,则使用该语句进行检查。 ELSE检查是否有匹配的记录包含所有匹配,但是一个类别等。这看起来非常低效,所以我希望如果有人遇到类似的问题,我会找到一个更好的方法来处理这个问题。

为重要性序列创建两个变量是有意义的(例如:" YesNoYesNoNo")和一个用于兴趣(例如" BasketballSingleNokids6Retail")然后采用模糊匹配?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

一种方法是首先确定哪些变量必须具有完全匹配,对这些变量进行笛卡尔连接,然后根据其他非强制匹配和输出记录生成分数,其中分数超过阈值。您需要的强制匹配越多,查询执行的效果就越好。

E.g。

%let MATCH_THRESHOLD = 2; /*At least this many optional variables must match*/
proc sql;
  create table matches as 
    select * from mentors a inner join mentees b
      /*Mandatory matches*/
      on   a.m_var1 = b.m_var1 
      and  a.m_var2 = b.m_var2 
      and  ...
        /*Optional threshold-based matches*/
        where  a.o_var1 = b.o_var1
             + a.o_var2 = b.o_var2
             + ...
             >= &MATCH_THRESHOLD;
quit;

更进一步 - 如果您输入的数据不一致,您可以使用soundex或编辑距离匹配,而不是完全匹配可选条件。如果某些可选比赛比其他比赛更有价值,您可以加权他们对比分的贡献。