我有一个SPSS的ctables语句,看起来有点像这样。
CTABLES
/TABLE (foo + bar) [C][ROWPCT.VALIDN PCT40.1, TOTALS[VALIDN F40.0, MISSING, TOTALN F40.0]]
/CLABELS ROWLABELS=OPPOSITE
/CATEGORIES VARIABLES=foo bar
ORDER=A KEY=VALUE EMPTY=INCLUDE TOTAL=YES POSITION=AFTER MISSING=INCLUDE.
foo
和 bar
是具有相同类别的libert-scale变量。
我让ctables包含了系统缺失的数量。但我需要的是系统缺失的百分比(或者系统和用户缺失的百分比)占总案例数的比例。是否有办法通过SPSS语法(PCOMPUTE也许?)或通过python来实现?
敬告
我找不到用 CTABLES 语法(包括 PCOMPUTE)来做这件事的方法,但一位同事提供了一个 Python 解决方案。如果你安装了Python Essentials (最近的版本都是默认安装的),把下面的代码复制粘贴到语法窗口中,运行CTABLES之后,再运行它。
preserve.
set printback none.
begin program python3.
import SpssClient
SpssClient.StartClient()
OutputDoc = SpssClient.GetDesignatedOutputDoc()
OutputItems = OutputDoc.GetOutputItems()
for index in range(OutputItems.Size()):
OutputItem = OutputItems.GetItemAt(index)
if OutputItem.GetType() == SpssClient.OutputItemType.PIVOT:
PivotTable = OutputItem.GetSpecificType()
ColLabels = PivotTable.ColumnLabelArray()
for i in range(0,ColLabels.GetNumRows()):
for j in range(ColLabels.GetNumColumns()):
try:
colText=ColLabels.GetValueAt(i,j)
if colText == "Missing":
MissingColumn=j
if colText == "Valid N":
ValidNColumn=j
if colText == "Total N":
TotalNColumn=j
except:
pass
DataCells = PivotTable.DataCellArray()
for i in range(DataCells.GetNumRows()):
MissingVal=(DataCells.GetValueAt(i,MissingColumn))
ValidN=(DataCells.GetValueAt(i,ValidNColumn))
TotalN=(DataCells.GetValueAt(i,TotalNColumn))
val= str( 100 * float(MissingVal)/float(TotalN) )
DataCells.SetValueAt(i,MissingColumn,val)
DataCells.SetNumericFormatAtWithDecimal(i,MissingColumn,"##.#%",1)
SpssClient.StopClient()
end program.
restore.
下面是一个小例子数据集的结果。