python - 从 SPSS 中的所有变量名称中去除前缀

标签 python variables macros rename spss

我有一个与这里提出的类似的问题( 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.

这是前几个变量的列表:

v23_1_dg_mnppusid
v23_1_dg_sigstatus
v23_1_dg_mnpvsno
v23_1_dg_mnpvslbl
v23_1_dg_mnpcvpid
v23_1_dg_mnpvisid
v23_1_dg_mnpvisno
v23_1_dg_mnpvispdt
v23_1_dg_mnpvisfdt
v23_1_dg_mnpfs0
v23_1_dg_mnpfs1
v23_1_dg_mnpfs2
v23_1_dg_mnpfs3
v23_1_dg_mnpfcs0
v23_1_dg_mnpfcs1
v23_1_dg_mnpfcs2

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

非常感谢您的支持! 亲切的问候, 击败

最佳答案

正如您现在的语法所示,它将在逐个变量的基础上运行。您提交/运行 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.

关于python - 从 SPSS 中的所有变量名称中去除前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323696/

相关文章:

python - cloudsql 和 appengine 数据存储 : cursor vs. 偏移量和限制

c - 在 C 中,声明指针的正确语法是什么?

javascript - 如何从Json输出中获取特定信息

macros - 在 Common Lisp 中正确地将列表传递给宏

vba - 删除多个工作表的更快方法

python - 将 Numpy 数组调整为不同大小块的更有效方法

python - 如何在 Python 中使用锁来保护对象?

java - 在 Java 中为变量分配动态名称

c - (C) 宏中包含 2 个参数的宏无法编译,但在功能上运行良好。我想知道为什么。谢谢

python - 在 python 中打开文件时,我不断收到 'invalid character in identifier'