如何从 python 中的 spss xml 输出中检索 table

how to retrieve table from spss xml output in python

我试图从 spssaux.CreateXMLOutput 获得一些 table 输出。 spss 命令从 spss.submit 开始验证。以下是我的代码示例:

varList = ["QPOVTY", "PERCAP", "MDGRENT", "QRICH200K", "QNOAUTO", "QSSBEN", "QED12LES",
        "QFEMALE", "QAGEDEP", "QNATAM", "QHISP", "QASIAN", "QFEMLBR", "QSERV", "QEXTRCT", 
        "QCVLUN", "QFHH", "QFAM", "PRENTER", "QMOHO", "QUNOCCHU", "MHSEVAL"]
spssPCASyntax = ["FACTOR //VARIABLES " + ' '.join(varList) + " //MISSING LISTWISE" + 
               " //ANALYSIS " + ' '.join(varList) + 
               " //PRINT UNIVARIATE INITIAL CORRELATION KMO EXTRACTION ROTATION FSCORE" + 
               " //CRITERIA MINEIGEN(1) ITERATE(25)" + 
               " //EXTRACTION PC" + 
               " //CRITERIA ITERATE(25)" + 
               " //ROTATION VARIMAX" + 
               " // SAVE REG(ALL)" + 
               " //METHOD=CORRELATION."]
tag = spssaux.CreateXMLOutput(spssPCASyntax, omsid = 'Factor Analysis')
CorM = spssaux.getValuesFromXmlWorkspace(tag, 'Correlation Matrix')
print CorM

关于 CorM = spssaux.getValuesFromXmlWorkspace(tag, 'Correlation Matrix') 的错误报告说 [errLevel 12] Invalid handle object.

我尝试对此进行调试并深入研究 spssaux 模块,但找不到解决问题的方法。我查看了调用层级,发现有一个函数嵌入了一些在DOS模式下无法查看的代码(代码显示只是无法识别的符号)。

根据spssaux.getValuesFromXmlWorkspace中的代码注释,该函数的最小输入似乎是tagtableSubtype。这里的 tableSubtype 是在 spss 的输出中找到的 Correlation Matrix 作为 "OMS Table Subtype" 的字符串。

谁能帮我解决这个问题或告诉我如何调试这个问题?

我将在星期六尝试查看此内容(我是该模块的作者),但我想知道 Statistic 的版本、OS 和 spssaux 版本。我还想要一个能说明问题的小数据样本。

这里有几个问题。首先,来自 CreateXMLOutput 的 return 代码是 (tag, errorcode) 的双重。您应该始终检查错误代码。
标记,错误代码 = spssaux.CreateXMLOutput(...
您要传递给 getValuesFromXmlWorkspace 的标签只是第一个元素。在这种情况下,错误代码是 1001,并且没有创建输出对象,因此尝试检索输出会导致错误,因为 XPath 表达式求值器找不到对象,传入的标记项是 duple,无论如何,而不是实际的标记,因此该参数无效。

那么问题就变成了为什么FACTOR命令失败了。有两个问题。一是语法无效,因为所有这些 // 都应该是 /。 FACTOR 可能会容忍这种情况,但这是不正确的。

其次,assembled 命令可能超过了最大行长度。我只想加入 varList 变量,例如
varList = "\n".join("xxx", "yyy:, etc
然后用换行符将整个命令连接成一个字符串:
spssPCASyntax = "\n".join("FACTOR VARIABLES", ...)
并将该字符串传递给 CreateXMLOutput。

提示:assemble 命令在命令字符串中使用命名参数替换比使用“+”连接更容易。例如,
cmd = """commandname /varlist %(varList)s
/一些选项
/someother options""" % locals()
这更具可读性并且更不容易出错。

最后,如果您试图找到引发错误的代码行,这里有一个提示。默认情况下,Statistics 会抑制错误生成的回溯,因为它对大多数用户没有意义。但是,如果您在启动 Statistics 之前创建了一个名为 SPSS_EXTENSIONS_RAISE 且值为 true 的环境变量,则会显示回溯,这使您可以查明代码中的错误位置。

创建环境变量的方式是 OS 特定的,但在 Windows 上,您可以使用控制面板/系统/高级/环境变量来执行此操作。确切的措辞和路径因 Windows 版本而异。

HTH
乔恩·派克