【问题标题】:Dynamic variable name referencing in SPSS syntaxSPSS 语法中的动态变量名引用
【发布时间】:2017-04-20 02:40:36
【问题描述】:

我想对变量组执行某些操作。每个组的名称中都有一个特定的索引。我不想为每个组重复语法。有没有办法动态引用变量名?

下面是语法。 207 是针对每组变量而变化的索引。

DO REPEAT aa= M9_207_1 to M9_207_99.
.....
END REPEAT.
EXECUTE.

【问题讨论】:

    标签: macros spss


    【解决方案1】:

    您可以使用宏来执行此操作。

    先定义宏:

    define !MyMacro ()
    !do !ndx=201 !to 207
      DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99").
      .....
      END REPEAT.
      EXECUTE.
    !doend
    !enddefine.
    

    然后调用它:

    !MyMacro.
    

    此处定义的宏将贯穿索引 201、202、203 等。如果您需要更具体的索引列表,可以这样定义宏:

    define !MyMacro (!pos=!cmdend)
    !do !ndx !in(!1)
      DO REPEAT aa= !concat("M9_",!ndx,"_1") to !concat("M9_",!ndx,"_99").
      .....
      END REPEAT.
      EXECUTE.
    !doend
    !enddefine.
    

    然后调用它,给出索引(你必须单独指定每个索引):

    !MyMacro 207 311 501 502 503 504 785。

    【讨论】:

    • 为什么要连接 !ind?不应该是 !ndx 吗?
    • 好的,我尝试运行以下命令:define !MyMacro(!pos=!cmdend) !do !ndx !in (!1) DO REPEAT aa= !concat("Q1_",!ind ,"1") 到 !concat("Q1",!ind,"_5")。频率 aa。结束重复。执行。 !doend !enddefine。 !MyMacro '010' '123'。我得到了错误:>第34列中的错误#6835。文本:,>在宏表达式中,函数名后面没有左括号。 >此命令的执行停止。 >第 23 列中的错误 # 4508。文本:_ >无法识别的文本出现在 DO REPEAT 命令上。它将被忽略。 >此命令的执行停止。
    • 1. !ind!ndx 你是对的 - 我现在更正了代码,应该运行得更好
    • 2.您运行的语法有一些问题 - (a) 使用我更正的语法 (b) 您在 !concat("Q1_",!ind,"1") 中缺少下划线 (c) 您不能在 do repeat 循环中使用 freq
    【解决方案2】:

    听起来你可以做一些循环操作。我经常在 R 中看到这种问题。我认为同样的想法也适用于 SPSS。通常,我会试试这个:

    for i in (1:207) {
      for j in (1:99) {
        M9[i,j] = ...
        certain actions...
      }
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2016-05-29
      相关资源
      最近更新 更多