在 spss 宏中执行 IF 和计算

Do IF and Compute in spss macros

我有以下 spss 语法:

DO IF SYSMIS(V5).
 COMPUTE V5 = LAG(V5).
END IF.
EXE.

它工作正常。但是我想对几个变量重复相同的过程。我试图编写一个宏来实现这一点,但我不断收到错误消息。这是我的尝试:

define filldown (!positional !cmdend).
  do if sysmis(!1).
   compute !1 = lag (!1).
  end if.
  execute.
!enddefine.

!filldown V5 age wt htm.

如何编写可以运行的宏(我是宏的新手)?

宏只是一个文本替换功能。它将逐字替换您的 !1 为您在调用宏 (V5 age wt htm) 时提供的任何参数。

为了简单起见,我建议使用简单的 do repeat 命令,而不是宏,如果您不熟悉它们,使用起来可能会有点不舒服

do repeat varlist=V5 age wt htm.
if sysmis(varlist) varlist=lag(varlist).
end repeat.
exe.

P.S.: 如果你真的想使用你的宏,你需要为每个变量分别调用它。

@horace_vr 的 do repeat 解决方案对于这种情况绝对是正确的方法。 下面只是让大家边看边学宏。

首先,你可以对每个变量单独使用你现在的宏,但是你需要使用原来的宏调用(不要加“!”),所以:

filldown V5.
filldown age.
....

当然你可以在宏中创建一个循环,像这样:

define filldown (!positional !cmdend).
!do !vr !in (!1)
  do if sysmis(!vr).
   compute !vr = lag (!vr).
  end if.
  execute.
!doend
!enddefine.

现在您可以对完整列表使用宏调用一次:

filldown V5 age wt htm.

将自动求和设置为口齿不清。其他变量无法量化。量词是一个 lisp 命令,它显示程序的下一个总和。

填写! V2 你需要在 rv 之前调用 V, V2 是位置的,即命令仅在进行更改后才可读。 定义填充! v5 做!房车!充满! V2 ………… 结束