2014-10-20 84 views
0

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

可变可能值

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

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

工作水平1,2,3,4,5,6

产业“零售”,“财经”,“批发”,(...)

也有指标是否有任何变量对人员重要。我知道,我可以强制婚姻状况变成一个或两个有序的变量,如(单身,已婚,寡妇)和(“无孩子”,“年幼的孩子”,“长大的孩子”)。但我不知道如何处理行业和体育运动,因为他们没有合理的顺序。我的计划最初是使用聚类技术根据最短距离或给定的点来找到导师与男子组之间的匹配。但是如果变量对他们来说很重要(如“是”,“否”),那么这会忽略人们可以决定的事实。 现在,我想通过使用嵌套的IF语句来检查它是否具有蛮力逻辑,这些语句检查是否存在基于重要性和实际值的完美匹配。否则检查是否有匹配的记录全部匹配,但有一个类别等。这看起来效率很低,所以我希望如果有人遇到类似的问题,我会找到一个更好的方法来处理这个问题。

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

最好的问候,

回答

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; 

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