2017-04-18 54 views
1

我们要符合使用SPSS 23.SPSS匹配病例对照1:N

在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. 

知道我们有2个问题:

  1. 我们要使用不同的公差为我们的案件。例如,1岁以下的病例应该与1个月的耐受性相匹配,1岁以上的病例的耐受性为6个月。我们怎么做到这一点?

  2. 我们希望在案例中平均分配这些控制。所以我们有60个案例和300个控制台。首先,我们希望每一个案例都有可能的控制权,而不是我们希望在案例中平均分配持久性控制权,以便每个案例至少有一个控制权。

感谢您的帮助。

回答

0

为了使模糊比简单的差异更复杂,您需要使用用Python编写的customfuzz函数来计算匹配条件。我已经在下面展示了一个函数。将其保存在一个名为customfuzz.py的文件中,该文件位于Python可以找到的位置,例如统计安装下的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 

对于第二个问题,你必须做的是第一轮比赛,然后删除在实际使用并与控制降低数据集重复上述过程中的所有控件。

+0

非常感谢!有效。 –