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
*(Вопрос) Среди моих данных есть 4 блока по 5 однотипных вопросов (с одинаковыми категориями ответов) в каждом.
	Для каждого наблюдения в каждом блоке мне надо найти модальное значение ответа.

*(Ответ) Размещён в SPSSX-L 28.08.2001, автор: rlevesque@videotron.ca.
*	Если распределение ответов будет мультимодальным, будет выбран ответ с наибольшим кодом! 

*Генерация примера данных.
INPUT PROGRAM.
SET SEED=987651423.
VECTOR q(20F8.0).
LOOP id=1 TO 25.
+	LEAVE id.
+	LOOP #=1 TO 20.
+		COMPUTE q(#)=TRUNC(UNIFORM(5)+1).
+	END LOOP.
+	END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
EXECUTE.

**** Начало обработки.
VECTOR resp=q1 TO q20.
LOOP qnb=1 TO 20.
COMPUTE resp=resp(qnb).
COMPUTE cat=1+TRUNC(qnb/5.1).
XSAVE OUTFILE='c:\\temp\\temp.sav' /KEEP=id cat qnb resp.
END LOOP.
EXECUTE.
GET FILE='c:\\temp\\temp.sav'.

* Аггрегируем наблюдения по id, cat, resp. Это даст нам частотное распределение
вариантов ответов для каждого id внутри каждой категории.
AGGREGATE
  /OUTFILE=*
  /BREAK=id cat resp
  /nbresp = N(qnb).

* Находим и сохраняем лишь варианты ответов с наибольшими частотами по каждому id и в каждой cat.
SORT CASES BY id cat nbresp.
ADD FILES FILE=* /BY=id cat /LAST=last.
SELECT IF last=1.
VARIABLE LABELS nbresp 'Число ответов' resp 'Вариант ответа'.
EXECUTE.