SPSS 对多个文件重复一个任务
SPSS repeat a task on many files
我想实现以下目标:
对于 100 个数据集(保存在 .sav 中)中的每一个,1) 打开文件,2) 添加一个名为 'Day' 的变量到它并用数字填充它。所以 file1 将在 'Day' 下有 1 个,file2 将在 'Day' 下有 2 个,依此类推(见下图 1)。 3) Select Status = 0 的行。并且 4) 以 ABC - Day xx - Female.sav
figure1
最终,我将在 ABC 中保存 100 个单独的文件 - 天(1 到 100)- Female.sav。
到目前为止,我一直在一个一个地做,但我想知道是否有办法使这个过程自动化?
到目前为止,这是我的代码:
***DAY 1***.
***open file***.
GET
FILE='ABC - Day 1 - Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 1.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 1 - Female.sav'
/COMPRESSED.
***DAY 2***.
***open file***.
GET
FILE='ABC - Day 2- Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 2.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 2 - Female.sav'
/COMPRESSED.
***DAY 3***.
***open file***.
GET
FILE='ABC - Day 3- Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 3.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 3 - Female.sav'
/COMPRESSED.
我读到过,对于像这样的重复命令,您可以编写一个宏,但我找不到这方面的好资源?如果有人有任何建议或指示,我将不胜感激。
以下宏将执行您需要的操作 - 它遍历 !day
参数并执行您描述的序列。
注意 - 宏中需要跳过的行 - 不要删除。
define !dofiles ()
!do !day=1 !to 100
***open file***.
!concat("GET FILE='ABC - Day ", !day, " - Female_May 6, 2022_09.24.sav'. ")
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = !day .
***save file***.
!concat("SAVE OUTFILE='Testing\ABC - Day ", !day , " - Female.sav' /COMPRESSED. ")
dataset close all.
!doend
!enddefine.
* Now that the macro is defined you can call it using it's name.
!dofiles .
我想实现以下目标:
对于 100 个数据集(保存在 .sav 中)中的每一个,1) 打开文件,2) 添加一个名为 'Day' 的变量到它并用数字填充它。所以 file1 将在 'Day' 下有 1 个,file2 将在 'Day' 下有 2 个,依此类推(见下图 1)。 3) Select Status = 0 的行。并且 4) 以 ABC - Day xx - Female.sav
figure1
最终,我将在 ABC 中保存 100 个单独的文件 - 天(1 到 100)- Female.sav。
到目前为止,我一直在一个一个地做,但我想知道是否有办法使这个过程自动化?
到目前为止,这是我的代码:
***DAY 1***.
***open file***.
GET
FILE='ABC - Day 1 - Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 1.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 1 - Female.sav'
/COMPRESSED.
***DAY 2***.
***open file***.
GET
FILE='ABC - Day 2- Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 2.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 2 - Female.sav'
/COMPRESSED.
***DAY 3***.
***open file***.
GET
FILE='ABC - Day 3- Female_May 6, 2022_09.24.sav'.
DATASET NAME DataSet1 WINDOW=FRONT.
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = 3.
EXECUTE.
***save file***.
SAVE OUTFILE='Testing\ABC - Day 3 - Female.sav'
/COMPRESSED.
我读到过,对于像这样的重复命令,您可以编写一个宏,但我找不到这方面的好资源?如果有人有任何建议或指示,我将不胜感激。
以下宏将执行您需要的操作 - 它遍历 !day
参数并执行您描述的序列。
注意 - 宏中需要跳过的行 - 不要删除。
define !dofiles ()
!do !day=1 !to 100
***open file***.
!concat("GET FILE='ABC - Day ", !day, " - Female_May 6, 2022_09.24.sav'. ")
***Drop a row of data***.
SELECT IF (Status=0).
***Add Day***.
COMPUTE DAY = !day .
***save file***.
!concat("SAVE OUTFILE='Testing\ABC - Day ", !day , " - Female.sav' /COMPRESSED. ")
dataset close all.
!doend
!enddefine.
* Now that the macro is defined you can call it using it's name.
!dofiles .