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

时间:2018-11-14 15:06:14

标签: python spss

我已经做了很多搜索,还没有一个明确的解决方案。我使用SPSS语法比使用Python更好,所以请多多包涵。

我有一个带有大量变量的SPSS数据集,这些变量被重新编码为不同的形式,并且我试图清理语法,并且几乎可以使用了。

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

重新编码变量后,我需要复制原始变量标签并将'Recoded:'附加到开头。我试图避免在所有重新编码的变量上显式定义变量标签的几百行。

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

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.

1 个答案:

答案 0 :(得分:2)

这个实际上不需要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".