我们希望使用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岁以上的病例的耐受性为6个月。我们怎么能这样做?
我们希望在案件上平均分配控制。所以我们有60个案例和300个控制点。首先,如果可能的话,我们希望每个案例都有一个控制,而不是我们想要在案件中平均分配持久控制,以便每个案例至少有一个和尽可能多的控制。
感谢您的帮助。
答案 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
对于第二个问题,您需要做的是第一轮匹配,然后删除实际使用的所有控件,并使用简化的控件数据集重复该过程。