从 SPSS 中的所有变量名中去除后缀

Strip suffix from all variable names in SPSS

我有一个数据集,其中每个变量名称都有后缀“_1”(这样做是为了指示第一个采访时间点)。我想从所有变量中删除此后缀,但它们有数百个,因此我正在寻找一种无需数百次使用 RENAME 语句即可完成此操作的方法。

我找到的最接近相关信息的是下面的 link,"A few SPSS loops for renaming variables dynamically." 但是,这些示例显示了如何添加后缀或更改前缀,而不是删除后缀。

http://www.ats.ucla.edu/stat/spss/code/renaming_variables_dynamically.htm

我安装了 SPSS 的 Python essentials 包,但我不熟悉 Python。

我不了解 SPSS。快速搜索找到了 "Renaming variables using Python" 和 python (http://www.ats.ucla.edu/stat/spss/faq/renaming_vars_Python.htm)

的示例

稍作改动即可适合您的情况:

begin program.
import spss, spssaux
spssaux.OpenDataFile('d:\data\elemapi2.sav')
vdict=spssaux.VariableDict()
mylist=vdict.range(start="grad_sch", end="enroll")
nvars = len(mylist)

for i in range(nvars):
    myvar = mylist[i]
    mynewvar = myvar.strip("_1")
    spss.Submit(r"""
        rename variables ( %s = %s) .
                        """ %(myvar, mynewvar))
end program.

尽管 UCLA website 上给出的解决方案适用于特定的 example/dataset,但 python 程序的编码方式可能无法在所有情况下都按预期工作。

例如 "V01_1".strip("_1") 会错误地导致 "V0" 而类似 "V_1_1".strip("_1") 的结果只会导致 "V",如果想要剥离只是后缀。

而且非常关键,即使变量没有 "_1" 后缀,它也会生成冗余 RENAME VARIABLES 命令(尽管我知道在你的特定示例中你说 all变量应).

此外,它为每个变量生成单独的 RENAME VARIABLE 命令,不确定这是否比生成单个 RENAME VARIABLES 命令有速度性能劣势?尽管如此,如果您需要以这种方式编码,也许我会展示一种不同的编码方式:

DATA LIST FREE / ID V01_1 V02_1 V03_1 W_1_1 W_2_1 W_3_1.
BEGIN DATA
0 11 12 13 21 22 23
END DATA.

begin program.
spss.Submit(r"set mprint on.")
import spss, spssaux
allvarlist=[str(v) for v in spssaux.VariableDict()]
filteredvarlist=[v for v in allvarlist if v.endswith("_1")]
spss.Submit( "rename variables (\n" \
     + "\n".join(filteredvarlist) \
     + "\n=\n" \
     + "\n".join([v[:-2] for v in filteredvarlist]) \
     + ").")
spss.Submit(r"set mprint off.")
end program.

这是 Jignesh 的 Python 程序的一个稍微紧凑的版本。它在功能上是一样的。

begin program.  
import spss, spssaux  
filteredvarlist=[v.VariableName for v in spssaux.VariableDict(pattern="^.*_1$")]  
spss.Submit( "rename variables (%s=%s)." %  
    ("\n".join(filteredvarlist), "\n".join([v[:-2] for v in filteredvarlist]))  
)  
end program.