我已经做了很多搜索,还没有一个明确的解决方案。我使用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.
答案 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".