Macros SPSS 23语法:简单宏循环

Macros SPSS 23语法:简单宏循环,macros,spss,Macros,Spss,我有一个数据集,我需要将案例分为几个不同的文件。 目前我正在运行: DATASET COPY DATA1 WINDOW = FRONT. ... (repeats) ... DATASET COPY DATA25 WINDOW = FRONT. 在它复制了25个副本之后,我在每个副本上使用了一组select if命令,以便只选择我想要的案例,并通过DATA25将它们保存为DATA1 我想做的是设置某种宏或循环,这样我可以说: LET %X = 1 to 25 loop DAT

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

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行几乎相同的语法。这只是一个非常简单的用例,但我希望我可以从这里开始,使用这种语法做一大堆其他的事情,比如打开多个文件,在其中我可以为文件名发生变化的部分输入一个通配符,或者使用一个通配符,这样我可以打开和excel的“工作表1”,然后对工作表2到10重复。
这是我可以用SPSS做的吗?我需要Python还是R扩展?到目前为止,我所看到的一切只允许您在一系列变量上循环运行一组命令。

如果您使用的是SPSS版本23,则不需要安装Python扩展,它包含在原始SPSS安装中。 如果您不想使用Python或R,您可以使用SPSS宏-look up
单独使用语法来执行所描述的操作!定义-!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.

非常感谢你!这很有帮助。