具有缺失百分比的 CTABLES(sysmis + 用户缺失)

CTABLES with percentage of missings (sysmis + user missing)

我有一个看起来有点像这样的 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.

foobar 是具有相同类别的李克特标度变量。

我得到了包含系统缺失数量的 ctables。不过,我需要的是系统缺失的百分比(或者可能是系统和用户缺失的百分比)相对于案例总数的百分比。有没有办法通过 SPSS 语法(可能是 PCOMPUTE?)或通过 python?

来实现这一点

此致

我找不到使用 CTABLES 语法(包括 PCOMPUTE)执行此操作的方法,但一位同事确实提供了 Python 解决方案。如果您安装了 Python Essentials(在最新版本中默认安装),请将以下代码复制并粘贴到语法 window 中,然后在 运行ning 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.

下面是一个小示例数据集的结果: