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

时间:2016-01-14 20:12:35

标签: python spss

我有一个数据集,其中每个变量名都有后缀“_1”(这是为了表示第一个访谈时间点)。我想从所有变量中删除这个后缀,但是有数百个这样的后缀,所以我正在寻找一种不使用RENAME语句数百次的方法。

最接近我发现的相关信息来自下面的链接,“一些用于动态重命名变量的SPSS循环。”但是,这些示例显示如何添加后缀或更改前缀,但不删除后缀。

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

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

3 个答案:

答案 0 :(得分:2)

这是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.

答案 1 :(得分:1)

我对SPSS一无所知。快速搜索找到了一个使用python(http://www.ats.ucla.edu/stat/spss/faq/renaming_vars_Python.htm

“使用Python重命名变量”的示例

只需稍加改动即可适合您的情况:

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.

答案 2 :(得分:0)

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

例如,var byteData:ByteArray; var store:ByteArray; var url:URLRequest = new URLRequest("file.bin"); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.load(url); loader.addEventListener(Event.COMPLETE, loaderComplete); function loaderComplete(e:Event):void { byteData = new ByteArray(); store = new ByteArray(); byteData.position = 0; byteData.endian = Endian.LITTLE_ENDIAN; store.position = 0; store.endian = Endian.LITTLE_ENDIAN; name_string = loader.data.readMultiByte(10,"iso-8859-01"); loader.data.readBytes(byteData,loader.data.position,138); loader.data.readBytes(store,loader.data.position,4); trace(store); } "V01_1".strip("_1")会导致"V0"错误,而"V_1_1".strip("_1")之类的内容只会导致"V",如果想要剥离,只会错误而且不符合要求后缀。

要成为超级关键,即使变量没有RENAME VARIABLES后缀,它也会生成冗余的"_1"命令(虽然我知道在你的特定例子中你说 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.