【问题标题】:Do IF and Compute in spss macros在 spss 宏中执行 IF 和 Compute
【发布时间】:2017-09-30 20:06:10
【问题描述】:

我有以下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.

我如何编写一个可以工作的宏(我是宏的新手)?

【问题讨论】:

    标签: macros spss


    【解决方案1】:

    @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.
    

    【讨论】:

      【解决方案2】:

      宏只是一个文本替换函数。它会用您在调用宏 (V5 age wt htm) 时提供的任何参数替换您的 !1

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

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

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

      【讨论】:

      • 我会做一个重复,但变量不连续。此外,我想在分析中多次使用宏调用。
      • do repeat 结构中指定的变量不必是连续的。如果它们是连续的,您可以指定它们,如var1 to varn;如果它们不是连续的,您只需明确指定它们,就像我在我的回答中所做的那样; V5agewthtm 可以位于数据集中的任何位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多