【问题标题】:SPSS 23 syntax: Simple Macro loopSPSS 23 语法:简单宏循环
【发布时间】:2017-11-06 19:45:18
【问题描述】:

我有一个数据集,我需要将案例分成几个不同的文件。 目前我正在跑步:

DATASET COPY DATA1 WINDOW = FRONT.
... (repeats) ...
DATASET COPY DATA25 WINDOW = FRONT.

在复制 25 个副本后,我在每个副本上使用一堆 select if 命令来只选择我想要的案例,然后通过 DATA25 将它们保存为 DATA1。

我想做的是设置某种宏或循环,这样我就可以说:

 LET %X = 1 to 25
    loop
    DATASET COPY DATA'%X' WINDOW = FRONT.
    end loop

而不是需要 25 行几乎相同的语法。这只是一个非常简单的用例,但我希望我可以从那里分支并使用这种语法做一大堆其他事情,例如打开多个文件,我可以在其中为部分放入通配符更改的文件名,或使用通配符,以便我可以打开“表格 1”和 excel,然后重复表格 2 到 10。 这是我可以用SPSS做的吗?我需要 Python 或 R 扩展吗?到目前为止,我所看到的所有内容都只能让您循环运行一组针对一系列变量的命令。

【问题讨论】:

    标签: macros spss


    【解决方案1】:

    如果您使用的是 SPSS 23 版,则无需安装 Python 扩展,它包含在原始 SPSS 安装中。 如果您不想使用 Python 或 R,您可以使用 SPSS 宏单独使用语法来执行您所描述的操作 - 查找 !define - !enddefine

    例如,以下宏将重复循环 25 次,在每个循环中,它会转到原始文件,将其复制到名为 DATA# 的数据集,选择 MyFilterVar=# 的案例,并将案例保存到单独的以数据集命名的文件:

    define CreateCopies ()
    !do !i=1 !to 25
    dataset activate Orig.
    dataset copy !concat('DATA',!i).
    dataset activate !concat('DATA',!i).
    select if MyFilterVar=!i.
    !let !FileName=!concat('MyPath\DATA',!i,".sav")
    save out=!quote(!FileName).
    !doend
    !enddefine.
    

    定义宏后,您需要为原始文件命名,然后调用宏:

    dataset name orig.
    CreateCopies.
    

    【讨论】:

    • 非常感谢!这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多