我想在很多变量上运行以下语法。因此,我想循环一堆变量。 语法如下:
compute v3a_mit = v3a.
recode v3a_mit
(-9998=2) (sysmis=9).
exe.
然而,在这种情况下,语法仅涉及变量“v3a”。我有一些其他变量(v3b,v3c,v3d ...),我想为此执行此语法。
所以,循环应该是这样的。
DO REPEAT X=v3a to v3z
compute concat(X,'_mit') = X.
recode concat(X,'_mit')
(-9998=2) (sysmis=9).
exe.
END REPEAT.
因此,在循环中,应创建新变量,根据循环中执行的变量获取新名称。 “SHIFT VALUES VARIABLE”命令是理想的(使用shift = 0)但是此命令不能在循环中使用。不幸的是,“计算concat(X,'_ mit')”也不起作用。
答案 0 :(得分:0)
CONCAT
是一个用于操作字符串变量值的函数。因此,您无法使用它来定义变量名称。
但是,您可以使用SPSS宏内的!CONCAT
函数。
您可以使用以下宏来重新编码一组变量。
DEFINE !recodeVars (vars = !CMDEND)
* for every variable in the 'vars' list do the RECODE INTO command.
!DO !var !IN (!vars)
RECODE !var (-9998=2) (sysmis=9) INTO !CONCAT(!var, '_mit').
!DOEND
!ENDDEFINE.
* macro call.
!recodeVars vars = v3a v3b v3c v3d.
在这里,我使用了RECODE INTO
命令,而不是一个COMPUTE
和一个RECODE
命令。但是当然,如何使用!CONCAT命令的原理对于COMPUTE操作也是一样的。
然而,您无法以这样的方式调用宏!recodeVars vars = v3a TO v3z.
在这种情况下,宏会尝试为变量执行RECODE" v3a" ," TO"和" v3z"。您必须使用要重新编码的整个变量列表来调用此宏。
这可能是很多打字。作为避免键入的简单方法,您可以通过SPSS菜单生成SPSS命令(例如Analize - > Descreptive Statistics - > Frequencies)然后选择要重新编码的变量(选择第一个变量,按住SHIFT键)键并选择最后一个变量)然后按粘贴按钮。带有变量列表的Frequency命令将粘贴到您的语法中。您现在可以将变量列表粘贴到宏调用中。
如果你安装了Python集成插件,你也可以使用这个小的python块来检索两个变量之间的varlist。
BEGIN PROGRAM.
import spss,spssaux
variables = 'v3a to v3z' #Specify variables
varlist = spssaux.VariableDict().expand(variables)
spss.SetMacroValue('!varlist', ' '.join(varlist))
END PROGRAM.
这将创建一个名为"!varlist"的宏。在调用时会扩展到变量列表。
您现在可以调用"!recodeVars"宏以下方式:!recodeVars vars = !varlist.
如果您没有安装python插件(并且不想使用手动输入或复制和粘贴),您可以使用"!DefList" macro from Raynald's SPSS Tools获取完整的变量列表。
顺便说一句,您还可以使用SHIFT VALUES
命令的宏。