1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
* Как сохранить файл, имеющий k*n наблюдений в k файлов по n наблюдений в каждом.
* Автор решения: rlevesque@videotron.ca.

*Сгенерируем файл для примера с 200 наблюдениями.
NEW file.
input program.
SET SEED=246813579.
loop caseid=1 to 200.
leave caseid. 
compute age=RND(uniform(100)).
COMPUTE gender=UNIFORM(1)>.5.
FORMATS caseid TO gender (F8.0).
end case.
end loop.
end file.
end input program.
execute.

SET MPRINT=ON.
*Определим макрос, который обработает исходный файл.
DEFINE !save_it (file=!TOKENS(1)
		/size=!TOKENS(1))
DO IF $casenum=1. 
	COMPUTE number1=1.
	COMPUTE file_nb=1.
ELSE IF lag(number1)<!size.
	COMPUTE  number1=lag(number1)+1.
	COMPUTE file_nb=lag(file_nb).
ELSE.
	COMPUTE number1=1.
	COMPUTE file_nb=lag(file_nb)+1.
END IF.

!DO !cnt=1 !TO !file.
	DO IF (file_nb=!cnt).
	XSAVE OUTFILE=!QUOTE(!CONCAT("c:\\temp\\FILE",!cnt,".sav")). 
	END IF.
!DOEND.
!ENDDEFINE.

*Теперь сохраним данные в 4 файлах по 50 наблюдений в каждом.
!save_it file=4 size=50 .
EXECUTE.