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
54
55
56
57
58
59
(Вопрос) Я провожу рандомизацию и пытаюсь сгенерировать пары стимулирующих воздействий для блочного эксперимента. Имеется 3 типа воздействий (позитивное, негативное, нейтральное: POS, NEG, NEU). Мне нужно, чтобы в каждом блоке было примерно равное число пар (например, чтобы каждая пара встречалась 2-3 раза в каждом блоке). Всего возможно 9 различных пар (последовательностей следования одного воздействия за другим в эксперименте): POS, затем NEG, POS, затем NEU, NEG - POS, NEG - NEU, NEU - POS, NEU - NEG, POS - POS, NEG - NEG и, наконец, NEU - NEU.  В блоке из 24 экспериментов будет 23 пары. Я генерирую случайные последовательности и затем мне нужно посчитать, сколько и каких пар следует включать в блок. Сейчас я делаю это вручную, но, может, кто-то знает лучший способ?!

*(Ответ) Размещён в SPSSX-L 12.03.2002, автор: Raynald Levesque.



DATA LIST free
/order (F2) val1 (A3).
BEGIN DATA.
1 POS
2 POS
3 POS
4 NEU
5 NEG
6 NEG
7 NEU
8 NEU
9 NEG
10 NEG
11 NEU
12 POS
13 NEG
14 POS
15 NEG
16 NEU
17 NEG
18 POS
19 NEG
20 POS
21 NEU
22 POS
23 NEU
24 NEU
END DATA.
RECODE val1 (CONVERT) ('POS'=1) ('NEU'=2) ('NEG'=3) INTO v1.
SAVE OUTFILE='c:\\temp\\mydata.sav'.



*////////////////////.
DEFINE !shuffle(fname=!TOKENS(1) /nb=!TOKENS(1))
GET FILE=!fname.
!DO !cnt=1 !TO !nb.
COMPUTE draw=UNIFORM(1).
SORT CASES BY draw.

CREATE v2=LEAD(v1,1).
COMPUTE pair=v1*10+v2.
LIST val1.
FREQ VAR=pair.
!DOEND
!ENDDEFINE.
*////////////////////.

* Используйте любое целое положительное число в качестве начальной точки генератора случайных чисел.
SET SEED=1987653.

* Мешаем 5 раз (получаем рандомизацию для 5 блоков).
!shuffle fname='c:\\temp\\mydata.sav' nb=5.