【发布时间】:2016-02-11 19:49:37
【问题描述】:
我有一个包含大约 1000 个变量的 SPSS 文件,我必须删除具有 0 个有效值的变量。我可以想到一个带有 if 语句的循环,但我找不到如何编写它。
【问题讨论】:
标签: spss
我有一个包含大约 1000 个变量的 SPSS 文件,我必须删除具有 0 个有效值的变量。我可以想到一个带有 if 语句的循环,但我找不到如何编写它。
【问题讨论】:
标签: spss
最简单的方法是像这样使用spssaux2.FindEmptyVars Python 函数:
begin program.
import spssaux2
spssaux2.FindEmptyVars(delete=True)
end program.
如果您尚未安装 spssaux2 模块,则需要从 SPSS 社区网站或 IBM Predictive Analytics 站点获取它,并将其保存在您的 Statistics 安装下的 python\lib\site-packages 目录中。
否则,VALIDATEDATA 命令(如果有)会将违反此类规则的变量识别为缺失值的最大百分比,但您必须将该输出转换为 DELETE VARIABLES 命令。您还可以使用 DESCRIPTIVES 来查找缺失值为零的变量,然后选择 N=0 的变量。
【讨论】:
如果您从未在 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 to LastVarName”形式(Q1 到 Q1000)而不是列出所有变量名称。
顺便说一句,当然可以完全自动执行此操作而无需手动复制这些名称(仅使用语法,不使用 Python),但增加的复杂性不值得为一次性使用而烦恼...
【讨论】: