从SP中的所有变量名中去掉前缀

2024-04-26 07:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似的问题在这里(Strip suffix from all variable names in SPSS),那里的答案已经帮助很大,但仍然有一个问题。在

我有一个数据集,其中每个变量名都有前缀“v23_1”。我想从所有的变量中删除这个前缀,但是有成百上千个变量,所以我正在寻找一种方法来做到这一点,而不必使用RENAME语句数百次。在

我用了这个代码:

begin program.
vdict=spssaux.VariableDict()
mylist=vdict.range(start="v23_1_dg_mnpdocid", end="v23_1_phq9t0_asku3t0")
nvars = len(mylist)

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

以下是前几个变量的列表:

^{pr2}$

对于第一个变量,它可以正常工作,但随后停止显示消息“重命名已经创建了两个名为dg_mnpfs的变量”。但剥离后的下一个变量的名称为“dg_mnpfs2”。所发生的是,“v23_1_dg_mnpfs1”结尾的1也被删除了。然后它还适当地打算删除“v23_1_dg_mnpfs2”末尾的2,这将导致相同的变量。我不明白为什么会发生这种事,也不明白我该如何避免。在

非常感谢您的支持! 谨致问候, 贝特


Tags: infromrangeprogramsuffixendstripdg
2条回答

下面是一个使用SPSS宏的过程版本。使用SPSSINC SELECT VARIABLES可以获得所有相关变量的完整列表,无论它们的顺序如何,而无需在命令中命名它们:

*this is just to create a sample data to play with.
data list list/v23_1_var1 to v23_1_var6.
begin data
end data.

下面将创建相关变量的列表:

^{pr2}$

正如您现在看到的语法,它将以变量为基础运行。提交/运行RENAME VARIABLES命令的次数与列表中变量的数量相同。 一方面,这是高效的,因为它比我下面建议的运行时间要长。 另一方面(也是更重要的)一方面,一个变量一个变量地进行,并不能防止重复变量。我猜您的数据文件中已经有一个名为dg_mnpfs的变量,并且您正试图通过重命名v23_1_dg_mnpfs来创建一个新的变量。只需在python代码中断后检查数据文件。在

编写代码的一种更有效的方法是使用旧名称和新名称创建列表,并只使用一个命令提交语法。在

begin program.
import spss,spssaux
vdict=spssaux.VariableDict()
mylist=vdict.range(start="v23_1_dg_mnpdocid", end="v23_1_phq9t0_asku3t0")
nvars = len(mylist)

my_new_list=[]
for i in range(nvars):
    myvar = mylist[i]
    mynewvar = myvar.strip("v23_1_")
    my_new_list.append(mynewvar)

my_syntax="ren var (" + " ".join(mylist) + "=" + " ".join(my_new_list) +")."
spss.Submit(my_syntax)
end program.

还有一件事:strip函数删除变量两端的文本。如果只想删除前缀,请考虑使用lstrip。可以找到详细信息here, in the official documentation.

相关问题 更多 >