【问题标题】:Syntax to loop variable recode in SPSSSPSS中循环变量重新编码的语法
【发布时间】:2016-05-29 15:09:06
【问题描述】:

我是使用语法的新手,需要帮助将一长串变量重新编码为新变量。

基本上我要循环的代码是:

RECODE cqC2_1_11 (9 thru Highest=10) (ELSE=COPY) INTO cqC2_1_11_T3.
VARIABLE LABELS  cqC2_1_11_T3 ‘CQC2Top3Box’.
EXECUTE.

我需要对变量 cqC2_1_11 到 cqC2_21_415 执行此操作(这些变量都按顺序彼此相邻)。

如果因为我需要指定每个新变量名称而重新编码为新变量太复杂,我可以简单地重新编码为同一个变量并保存数据集的新副本以供我需要运行的分析。

【问题讨论】:

  • 选择变量标签的规则/模式是什么?
  • 注意,我怀疑,你有一个 10 分的量表,你要二分法?您的RECODE 规范应该是(8 THRU HI=1) (ELSE=0)?此外,您不希望所有重新编码的变量都使用通用的“CQC2Top3Box”变量标签,否则您对生成的任何输出的管理会有些困难。因此,我在下面提供的解决方案保留并传输带有添加前缀“T3B”的原始变量标签。

标签: loops vector syntax spss recode


【解决方案1】:

首先,RECODE 命令可以接收(和输出)多个变量。请参阅文档和示例提供here。尽管第一个示例在该链接中提供了重新编码为相同的变量,但重新编码为不同变量的等效命令是:

RECODE V1 TO V3 (0=1) (1=0) (2,3=-1) (9=9) (ELSE=SYSMIS) INTO W1 to W3.

上述方法有效,因为 SPSS 可以直观地解释和扩展 W1 TO W3 以等于 W1, W2, W3。

您遇到的困难,虽然SPSS可以读取顺序变量cqC2_1_11 TO cqC2_21_415,因为它们是数据集中现有的输入变量,但要指定等效匹配的输出变量名称并不容易。

例如,您不能简单地指定 RECODE....INTO T3B_cqC2_1_11 TO T3B_cqC2_21_415,因为您有双重索引,而且 SPSS 不知道如何展开这些名称。

但是,例如,如果您有 cqC2_1 TO cqC2_415,即 415 个变量,您可以使用 RECODE....INTO T3B_cqC2_1 TO T3B_cqC2_415。

因此,您最好的选择是构建自定义宏,使用 SPSS 内置宏工具或其集成的 Python 可编程性。

Python 的可编程性要好得多,因此以下是 Python 解决方案,您可以根据自己的特定需求和标准进行调整,以帮助您入门:

get file="C:\Program Files\IBM\SPSS\Statistics\23\Samples\English\Employee data.sav". 

begin program.
import spss, spssaux, spssdata
spss.Submit("set mprint on.")
vd=spssaux.VariableDict(pattern="job")

spss.Submit("""RECODE %s (8 THRU HI=1) (ELSE=COPY) INTO %s.""" % ("\n".join([str(v) for v in vd]),"\n".join(["T3B_" + str(v) for v in vd])))
for v in vd:
    spss.Submit("""VARIABLE LABEL T3B_%s "%s".""" %(v, "T3B_" + v.VariableLabel))
spss.Submit("set mprint off.")
end program.

【讨论】:

  • 感谢您的回复,您是正确的,我正在尝试为一系列评分量表问题创建前 3 名框分数。但是我根本不了解python,并且在不了解它在做什么的情况下宁愿不依赖它。有没有更简单的方法可以简单地重新编码到同一个变量中,这样我就不必处理变量标签问题了?
  • 是的,如果您想重新编码到相同的变量(并覆盖原始变量),解决方案将非常简单。正如Jignesh Sutar 提到的,您可以在 recode 命令中指定一组变量。只需在没有INTO 关键字的情况下使用它:RECODE cqC2_1_11 TO cqC2_21_415 (9 thru Highest=10) (ELSE=COPY)。但是请注意不要覆盖您的原始数据集;-)
  • 这是我最初的尝试,它导致 SPSS 显示“转换未决”通知,但是在尝试执行时我收到以下信息:>第 1 列中的错误#4617。文本:执行>其他在 > 括号内的值规范之后,在 RECODE 命令上找到关键字“INTO”。 >此命令的执行停止。但是,当我运行描述性分析时,它会使用待处理的转换数据填充单元格。不知道为什么 EXECUTE 不起作用,但强制它进行分析确实......
  • 您可能希望提供生成该错误的语法,以便任何人有机会提供帮助。虽然,我怀疑这很可能是由于RECODE 命令中缺少关键字INTO。
  • @Chad 也许你忘记了 recode 命令末尾的点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多