0

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

可变 的可能值

运动 “棒球”、“足球”、“篮球”(……)

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

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

行业 “零售”、“金融”、“批发”、(……)

如果任何变量对人很重要,也有指标。我理解,我可以将婚姻状况强制转换为一两个序数变量,例如(“单身”、“已婚”、“寡妇”)和(“没有孩子”、“年幼的孩子”、“成年的孩子”)。但我不知道如何处理工业和体育,因为它们没有逻辑顺序。我的计划最初是使用聚类技术,根据最短距离或给定点找到导师和被指导者集之间的匹配。但这会忽略人们可以决定变量对他们是否重要的​​事实(“是”,“否”)。现在,我正在考虑通过使用嵌套的 IF 语句来检查是否存在基于重要性和实际值的完美匹配来对其进行蛮力逻辑。ELSE 检查是否有匹配的记录包含所有匹配项,但只有一个类别等。

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

此致,

4

1 回答 1

0

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

例如

%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 或编辑距离匹配,而不是可选条件的精确匹配。如果某些可选匹配比其他匹配更有价值,您可以加权它们对分数的贡献。

于 2014-10-20T19:51:20.270 回答