Python 正斜杠阻止自动创建变量标签

Python 正斜杠阻止自动创建变量标签,python,spss,Python,Spss,我对此做了很多研究,但还没有找到一个明确的解决方案。我使用SPSS语法比使用python要好得多,所以请耐心听我说 我有一个SPSS数据集,其中包含大量的变量,这些变量被重新编码成不同的形式,我正在尝试清理语法,我几乎做到了 该数据集来自一个excel文件,该文件的列标题为完整的变量标签,因此当SPSS导入该数据集时,未编辑的版本会卡在我想要的变量标签字段中;换句话说,我没有在任何时候明确定义变量标签 在我重新编码变量之后,我需要复制原始变量标签,并在开头追加“recocode:”。我试图避免在

我对此做了很多研究,但还没有找到一个明确的解决方案。我使用SPSS语法比使用python要好得多,所以请耐心听我说

我有一个SPSS数据集,其中包含大量的变量,这些变量被重新编码成不同的形式,我正在尝试清理语法,我几乎做到了

该数据集来自一个excel文件,该文件的列标题为完整的变量标签,因此当SPSS导入该数据集时,未编辑的版本会卡在我想要的变量标签字段中;换句话说,我没有在任何时候明确定义变量标签

在我重新编码变量之后,我需要复制原始变量标签,并在开头追加“recocode:”。我试图避免在所有重新编码的变量上显式定义数百行变量标签

我遇到的问题是其中一个标签包含正斜杠,使用下面示例中的语法会导致在语法中将斜杠视为退出字符,并且包含斜杠的标签仅部分复制到重新编码的变量

data list /var001 1 var002 5.
begin data
3   4
4   5
2   3
5   5
end data.
variable labels
var001 "Variable label that contains apostrophes' but not forward slashes"
/var002 "Variable label that contains apostrophes' and/or forward slashes".
RECODE var001 var002 (1 thru 3 = 0) (4 thru 5 = 1) INTO var001_r var002_r.
EXECUTE.

begin program.
variables='var001 to var002'
import spss, spssaux, spssdata
spss.Submit("set mprint on.")
vdict=spssaux.VariableDict(caseless=True)
varlist=spssaux.VariableDict().expand(variables)
for var in varlist:
    vlab = vdict[var].VariableLabel
    spss.Submit("VARIABLE LABEL %s." % ("\n" .join([r"%s_r ""Recode: %s"" " % (str(var), vlab)])))
spss.Submit("set mprint off.")
end program.

实际上并不需要python来完成这一步。 以下语法使用OMS从
dictionary
命令中捕获var名称和标签,并使用它们编写创建新标签的新语法:

dataset name orig.
DATASET DECLARE  vrlst.
OMS   /SELECT TABLES  /IF COMMANDS=['File Information'] SUBTYPES=['Variable Information']
  /DESTINATION FORMAT=SAV  OUTFILE='vrlst' .
DISPLAY DICTIONARY.
omsend.
dataset activate vrlst.
select if Label<>"<none>".
string cmd (a100).
compute cmd=concat("var labels ", rtrim(var1), '_r  "recoded: ', Label, '".'). 
write out="path\recode labels.sps" /cmd. 
dataset activate orig.
insert file="path\recode labels.sps".
数据集名称来源。
数据集声明vrlst。
OMS/SELECT TABLES/IF命令=['文件信息']子类型=['变量信息']
/目标格式=SAV OUTFILE='vrlst'。
显示字典。
奥姆森德。
数据集激活vrlst。
如果标签为“”,请选择。
字符串cmd(a100)。
compute cmd=concat(“变量标签”,rtrim(var1),“\r”重新编码:”,标签“,”。
write out=“path\recode labels.sps”/cmd。
数据集激活源。
插入file=“path\recode labels.sps”。

谢谢!这非常有效。我没想到要用OMS!