我有一个包含大约1000个变量的SPSS文件,我必须删除具有0个有效值的文件。我可以想到一个带有if语句的循环,但我找不到如何编写它。
答案 0 :(得分:3)
最简单的方法是使用像这样的spssaux2.FindEmptyVars Python函数。
开始计划。
import spssaux2
spssaux2.FindEmptyVars(删除= TRUE)
结束计划。
如果您还没有安装spssaux2模块,则需要从SPSS社区网站或IBM Predictive Analytics网站获取它,并将其保存在Statistics安装下的python \ lib \ site-packages目录中。
否则,VALIDATEDATA命令(如果有)将识别违反此类规则的变量,例如缺失值的最大百分比,但您必须将该输出转换为DELETE VARIABLES命令。您还可以使用DESCRIPTIVES查找缺失值为零的变量,并选择N = 0的变量。
答案 1 :(得分:1)
如果您在SPSS中从未使用过python,那么这里有一种方法可以在没有它的情况下完成工作(不是很优雅,但应该完成工作):
这将计算每个变量中的有效案例,并仅选择具有0个有效案例的案例。然后,您将手动将这些变量的名称复制到将删除它们的语法命令中。
DATASET NAME Orig.
DATASET DECLARE VARLIST.
AGGREGATE /OUTFILE='VARLIST'/BREAK=
/**list_all_the_variable_names_here = NU(*FirstVarName to *LastVarName).
DATASET ACTIVATE VARLIST.
VARSTOCASES /MAKE NumValid FROM *FirstVarName to *LastVarName/INDEX=VarName(NumValid).
SELECT IF NumValid=0.
EXECUTE.
暂停此处以复制列表中的其余名称并完成语法,然后继续:
DATASET ACTIVATE Orig.
DELETE VARIABLES *paste_here_all_the_remaining_variable_names_from_varlist .
注意: *我把星号放在你必须用变量名替换我的文本的地方。 **如果变量整齐地命名为Q1,Q2,Q3 ...... Q1000,则可以使用" FirstVarName到LastVarName"表格(Q1至Q1000),而不是列出所有变量名称。
顺便说一下,当然可以完全自动地完成这一操作,而无需手动复制这些名称(仅使用语法,不使用Python),但增加的复杂性不值得一次性使用......