3

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

基本上我试图循环的代码是:

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 执行此操作(这些变量都按顺序彼此相邻)。

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

4

1 回答 1

2

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

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

上述方法之所以有效,是因为 SPSS 可以直观地解释和扩展W1 TO W3为 equal 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_415415 个变量,您可以使用RECODE....INTO T3B_cqC2_1 TO T3B_cqC2_415.

因此,您最好的选择是使用 SPSSs 内置宏工具或其集成的 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.
于 2016-02-17T19:47:41.090 回答