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
44
45
46
47
48
49
50
51
52
53
* ВОПРОС: мне требуется случайным образом разделить файл на 2 части.
Сделать это надо n раз, каждый раз разделяя на 2 части исходный файл.
При этом я хочу сохранить результаты всех n разделений в одном и том же файле данных.
* Ответ: Ray.
* www.spsstools.net
*.

SET MPRINT=no.
* Создадим пример данных для иллюстрации.
NEW file.
input program.
loop id_org=1 to 10.
leave id_org.
COMPUTE #nb_ees=4+TRUNC(UNIFORM(10)).
loop id_ee=1 to #nb_ees.
+	compute dept=1+TRUNC(uniform(5)).
+	end case.
end loop.
end loop.
end file.
end input program.
execute.
SAVE OUTFILE='c:\\temp\\temp.sav'.

* Определим макрос.

*///////////////////////////////.
DEFINE !do_job (n_samp=!TOKENS(1))
!DO !cnt=1 !TO !n_samp
GET FILE='c:\\temp\\temp.sav'.
COMPUTE randval = UNIFORM(1).
SORT CASES BY id_org randval.
COMPUTE seqnum = $casenum.
COMPUTE choose1 = MOD(seqnum,2).
* В переменной samplen будет номер варианта разделения.
COMPUTE splitn=!cnt.
* Условие IF добавлено А.Б. для сохраниения результатов всех разделений в один файл.
!IF (!cnt=1) !THEN
SAVE OUTFILE='c:\\temp\\data.sav'.
!ELSE
ADD FILES FILE=*
/FILE='c:\\temp\\data.sav'.
SAVE OUTFILE='c:\\temp\\data.sav'.
!IFEND.
!DOEND.
!ENDDEFINE.
*///////////////////////////////.

SET MPRINT=yes.
* Вызовем макрос.
!do_job n_samp=3.

* Укажите в качестве значения n_samp нужное число вариантов разделений.