在 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
…………
结束
我有以下 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 ………… 结束