在SPSS中循环变量重新编码的语法

时间:2016-02-17 18:25:37

标签: loops vector syntax spss recode

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

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

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这些(这些变量都是彼此相邻的)。

如果由于我需要指定每个新的变量名称而过于复杂而无法重新编码为新变量,我可以简单地重新编码到同一个变量并保存数据集的新副本以进行我需要运行的分析

1 个答案:

答案 0 :(得分:2)

首先,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.