2014-10-20 97 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; 

進一步說 - 如果你有不一致輸入的數據,你可以使用同音或編輯距離匹配,而不是精確匹配的可選條件。如果某些可選比賽比其他比賽更有價值,那麼您可以對比分加分他們的貢獻。