失误百分比的表格(系统错误+用户失误)

问题描述 投票:0回答:1

我有一个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 是具有相同类别的libert-scale变量。

我让ctables包含了系统缺失的数量。但我需要的是系统缺失的百分比(或者系统和用户缺失的百分比)占总案例数的比例。是否有办法通过SPSS语法(PCOMPUTE也许?)或通过python来实现?

敬告

spss
1个回答
1
投票

我找不到用 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.

下面是一个小例子数据集的结果。

CTABLES with modification

© www.soinside.com 2019 - 2024. All rights reserved.