SPSS 23语法:简单的宏循环

时间:2017-11-06 19:45:19

标签: macros spss

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

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扩展吗?到目前为止,我所看到的一切只能让你在一系列变量上循环运行一组命令。

1 个答案:

答案 0 :(得分: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.