# SPSS AUTORECODE - 保存并应用模板出错的问题

***SPSS 语法示例来自 [www.spss-tutorials.com](/spss-syntax-examples) .**

***设置测试数据。**

```spss
data list free/v1.
begin data
1 2 3 4 5 6
end data.

value labels v1 1 'Very bad' 2 'Bad' 3 'Not good, not bad' 4 'Good' 5 'Very good' 6 'No answer'.
variable labels v1 "Variable one".

string v2 (a20).

compute v2 = valuelabels(v1).

variable labels v2 "Variable two".
execute.

以上代码首先创建了一个名为 v1 的变量,并赋予它 1 到 6 的数值,同时使用 value labels (值标签) 定义了这些数值对应的文本标签,例如 1 对应 ‘Very bad’。接着,创建了一个字符型变量 v2,并将 v1 的值标签赋给 v2

*使用 AUTORECODE 仅仅是为了创建模板。

autorecode v1 /into v3/save template 'likert.sat'.

这行代码使用 AUTORECODE 命令,将 v1 变量重新编码成新的变量 v3,同时将编码方案保存为一个模板文件 likert.sat。 重要的是要注意到,此时 AUTORECODE 的目的是生成模板,而非直接应用。

*尝试将 v2 转换为正确编码的数值型变量。

autorecode v2/into v4/apply template 'likert.sat'.

这里尝试将字符型变量 v2 应用之前保存的模板 likert.sat,将其重新编码为数值型变量 v4

*v4 的编码不正确,并且与 v1 不同。

set tnumbers both.

frequencies v1 v4.

这段代码首先设置 tnumbersboth,这样在结果中会同时显示数值和值标签。然后使用 frequencies 命令计算 v1v4 的频数,用于比较它们的编码是否一致。 运行后你会发现 v4 的编码是错误的,与 v1 的编码不同。

*查看 AUTORECODE 模板。

get file 'likert.sat'.

***奇怪。没有应用编码方案的痕迹。**

display dictionary.

这段代码首先使用 get file 命令打开保存的模板文件 likert.sat。 然后,使用 display dictionary 命令显示模板文件的字典信息。你会发现模板文件中并没有包含用于将 v2 转换为 v4 的编码方案。

问题分析:

问题在于 SPSS 的 AUTORECODE 命令在保存模板时,可能没有正确保存从字符型变量到数值型变量的转换规则。 AUTORECODE 保存的模板主要用于对 数值型变量 进行重新编码,对于字符型变量,应用模板可能无法达到预期的效果。

解决方法:

示例 (使用 RECODE 命令):

RECODE v2
('Very bad'=1) ('Bad'=2) ('Not good, not bad'=3) ('Good'=4) ('Very good'=5) ('No answer'=6)
INTO v4.
VARIABLE LABELS v4 "Recoded Variable two".
VALUE LABELS v4
1 'Very bad' 2 'Bad' 3 'Not good, not bad' 4 'Good' 5 'Very good' 6 'No answer'.
EXECUTE.
frequencies v1 v4.

这段代码使用 RECODE 命令直接将 v2 的每个值标签映射到对应的数值,并将结果存储到 v4 中。 之后,定义 v4 的变量标签和值标签,并计算频数进行验证。 ```