我有一个数据集,其中每个变量名都有后缀“_1”(这是为了表示第一个访谈时间点)。我想从所有变量中删除这个后缀,但是有数百个这样的后缀,所以我正在寻找一种不使用RENAME语句数百次的方法。
最接近我发现的相关信息来自下面的链接,“一些用于动态重命名变量的SPSS循环。”但是,这些示例显示如何添加后缀或更改前缀,但不删除后缀。
http://www.ats.ucla.edu/stat/spss/code/renaming_variables_dynamically.htm
我使用SPSS安装了Python essentials包,但我不熟悉Python。
答案 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.