SPSS Python代码无法忽略‘???’值问题及解决方案
问题分析与解决方案
你这段SPSS Python代码的核心问题确实出在对spss.Dataset中cases存储字符串的机制理解上,我来拆解下:
原代码问题重现
你原本的代码意图是忽略值为???的记录,但if(fps[0] != '???'):这个判断完全没起作用:
BEGIN PROGRAM PYTHON. import spss spss.StartDataStep() frames=spss.Dataset(name="Frps") datum=spss.Dataset(name="Datum") for rowDat in range(len(datum.cases)): for rowFra in range(len(frames.cases)): fps = frames.cases[rowFra,1] if(fps[0] != '???'): datum.cases[rowDat,10] = float(fps[0]) spss.EndDataStep() END PROGRAM.
问题根源
当你通过frames.cases[rowFra,1]获取单元格值时,返回的fps并不是单纯的字符串类型——SPSS的Dataset对象在存储字符串型数据时,会额外封装一些元数据或格式信息,直接用fps[0] != '???'做严格相等判断会失效,因为fps[0]的实际内容是带封装格式的值,并非纯字符串???。
解决方案
把条件判断改为先将fps[0]转为纯字符串,再检查???是否不在其中,这样就能正确过滤掉目标值:
BEGIN PROGRAM PYTHON. import spss spss.StartDataStep() frames=spss.Dataset(name="Frps") datum=spss.Dataset(name="Datum") for rowDat in range(len(datum.cases)): for rowFra in range(len(frames.cases)): fps = frames.cases[rowFra,1] if '???' not in str(fps[0]): datum.cases[rowDat,10] = float(fps[0]) spss.EndDataStep() END PROGRAM.
这个修改的核心是用str()把SPSS封装的单元格值转为纯字符串,再通过包含性判断替代严格相等判断,就能准确识别并跳过???的记录了。
内容的提问来源于stack exchange,提问作者Hombrextrano
相关产品推荐
相关产品推荐

