使用 Python 将 SPSS 变量名设置为标签
作者:Ruben Geert van den Berg,发布于 SPSS Python 基础
我们之前的课程开始时使用了一个相当有问题的数据文件。我们使用 Python 重新排序了变量,并将数据保存为 trials-ordered.sav
,这是本课程的起点。下面的屏幕截图显示了部分数据。
我们发现长的变量名存在两个问题:首先,在 [SPSS 语法窗口 (syntax window)] 中输入它们太麻烦,会导致语法过于冗长且难以管理。更重要的是,下划线在我们的输出中看起来不太美观,但变量名不能包含空格。
因此,我们将把变量名设置为 [变量标签 (variable labels)],并将下划线替换为空格。最后,我们将用简洁的名称替换冗长的名称。
1. 从数据中检索所有变量名
从数据中检索所有变量名是一种标准技术,我们在 使用 Python 在 SPSS 中对变量进行排序 中对此进行了介绍。我们将再次使用以下语法来实现:
***查找所有变量名。
**
begin program python3.
import spss
for ind in range(spss.GetVariableCount()):
varNam = spss.GetVariableName(ind)
print(varNam)
end program.
这段代码使用 spss.GetVariableCount()
获取变量的数量,然后使用 spss.GetVariableName(ind)
获取每个变量的名称,并通过 print(varNam)
将其打印出来。
2. 从数据中检索所有变量标签
请注意,我们前 3 个变量已经有标签。为了确保我们不覆盖它们,我们现在还将检查所有变量标签,这是一个由 spss
模块提供的简单函数。
***查找所有变量标签。
**
begin program python3.
import spss
for ind in range(spss.GetVariableCount()):
varNam = spss.GetVariableName(ind)
varLab = spss.GetVariableLabel(ind)
print(varLab)
end program.
这段代码使用 spss.GetVariableLabel(ind)
获取每个变量的标签,并通过 print(varLab)
将其打印出来。如果变量没有标签,则返回空字符串。
3. 使用 Python 创建变量标签
如果某个变量还没有标签,Python 将返回一个空字符串。我们将使用 if not varLab:
检查是否如此,如果标签为空,则该条件为 True
。对于这些变量,我们将通过将变量名中的下划线替换为空格来创建变量标签。现在,我们只打印这些标签。
***如果变量标签为空,则变量标签 = 变量名,下划线替换为空格。
**
begin program python3.
import spss
for ind in range(spss.GetVariableCount()):
varNam = spss.GetVariableName(ind)
varLab = spss.GetVariableLabel(ind)
if not varLab: # 如果 varLab 是空字符串(未设置 VARIABLE LABEL),则为 True
varLab = varNam.replace("_"," ")
print(varLab)
end program.
这段代码首先判断 varLab
是否为空,如果为空,则使用 varNam.replace("_"," ")
将变量名中的下划线替换为空格,并将结果赋值给 varLab
,最后通过 print(varLab)
将标签打印出来。
4. 创建 VARIABLE LABELS 命令
现在,我们将使用 "VARIABLE LABELS %s '%s'."%(varNam,varLab)
创建并检查 [VARIABLE LABELS 命令]。第一个 %s
被变量名替换,第二个 %s
被其新创建的标签替换。这种技术在 SPSS Python 文本替换教程 中有解释。
***创建并检查所需的 VARIABLE LABELS 命令。
**
begin program python3.
import spss
for ind in range(spss.GetVariableCount()):
varNam = spss.GetVariableName(ind)
varLab = spss.GetVariableLabel(ind)
if not varLab:
varLab = varNam.replace("_"," ")
print("VARIABLE LABELS %s '%s'."%(varNam,varLab))
end program.
这段代码生成 [SPSS 语法 (SPSS syntax)],用于设置变量标签。"VARIABLE LABELS %s '%s'."%(varNam,varLab)
语句使用字符串格式化,将变量名和标签插入到 [VARIABLE LABELS 命令] 中。
注意:由于我们在变量标签 周围 使用单引号,因此在变量标签 内部 不能有单引号。这里没有问题,但如果有,请使用 2 个单引号转义标签中的每个单引号。
结果
5. 运行 VARIABLE LABELS 命令
由于我们的 [VARIABLE LABELS 命令] 看起来没问题,我们现在将让 Python 在 SPSS 中运行它们。我们基本上只需将 print
替换为 spss.Submit
并添加一些括号。这完成了我们工作的第一部分。
***让 Python 运行 VARIABLE LABELS 命令。
**
begin program python3.
import spss
for ind in range(spss.GetVariableCount()):
varNam = spss.GetVariableName(ind)
varLab = spss.GetVariableLabel(ind)
if not varLab:
varLab = varNam.replace("_"," ")
spss.Submit("VARIABLE LABELS %s '%s'."%(varNam,varLab))
end program.
这段代码使用 spss.Submit()
函数来执行生成的 [SPSS 语法 (SPSS syntax)],从而实际地设置变量的标签。
6. RENAME VARIABLES
此时,如果我们只显示变量标签(不显示名称)并使用 SET TVARS LABELS
命令,至少我们的输出看起来会不错。但是,我们仍然更喜欢简洁的变量名。如果我们使用 TO
关键字,则可以使用单行 [RENAME VARIABLES 命令] 来完成这项任务。
***为反应时间和答案设置简洁的变量名。
**
rename variables(Trial_1_Reaction_Time_Milliseconds to Trial_20_Answer = time_1 to time_20 answer_1 to answer_20).
这段代码使用 [RENAME VARIABLES 命令] 来将长的、不方便的变量名替换为更短、更易于管理的名称。
最终结果
如图所示,我们的变量名现在简洁明了,并且我们也有不错的变量标签。在进一步编辑或分析这些数据时,这肯定会有回报…