SPSS匹配案例控制1:n

时间:2017-04-18 13:39:10

标签: matching spss

我们希望使用SPSS 23匹配我们的案例和控件。

我们已按照1:3的比例和1个月的耐受性对照我们的病例和对照年龄,如下所示:

DATASET ACTIVATE DataSet1.
FUZZY BY=Age SUPPLIERID=Databasenr NEWDEMANDERIDVARS=MatchID1 MatchID2 MatchID3 GROUP=Case FUZZ=1 
EXACTPRIORITY=TRUE  
MATCHGROUPVAR=Matchgroupvariable 
/OPTIONS SAMPLEWITHREPLACEMENT=FALSE MINIMIZEMEMORY=FALSE SHUFFLE=TRUE.

知道我们有两个问题:

  1. 我们希望对我们的案例使用不同的容差。例如,1岁以下的病例应与1个月的耐受性匹配,1岁以上的病例的耐受性为6个月。我们怎么能这样做?

  2. 我们希望在案件上平均分配控制。所以我们有60个案例和300个控制点。首先,如果可能的话,我们希望每个案例都有一个控制,而不是我们想要在案件中平均分配持久控制,以便每个案例至少有一个和尽可能多的控制。

  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为了使模糊比简单差异更复杂,您需要使用Python编写的customfuzz函数来计算匹配条件。我在下面展示了一个功能。将它保存在Python可以找到的名为customfuzz.py的文件中,例如Statistics安装下的python \ lib \ site-packages目录。

然后在FUZZY语法中使用CUSTOMMATCH ='customfuzz.custommatch'而不是FUZZ。

这是功能。显示的缩进很重要。该代码假定年龄为年(可包括小数部分)。

custommatch(demander, supplier):
    """calculate match for one variable and return 0 or 1

    demander and supplier are assumed to be (lists) of ages in years"""

    # check for missing values
    if demander[0] is None or supplier[0] is None:
        return 0   # no match

    delta = abs(demander[0] - supplier[0])   # difference in years
    if demander[0] < 1:    # demander age lt 1 year
        if delta <= .08333:   # difference le 1 month
            return 1   # ok match
        else:
            return 0
    else:
        if delta <= .5:    # difference le half year
            return 1   # ok match
        else:
            return 0

对于第二个问题,您需要做的是第一轮匹配,然后删除实际使用的所有控件,并使用简化的控件数据集重复该过程。