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
* (Вопрос).
Существует ли способ отметить наблюдения с одинаковыми значениями по крайней мере, в 2 переменных?
То есть, хотелось бы в результате иметь маркерную переменную с "1", если есть, по крайней мере,
одна пара одинаоквых значений и "0", если одинаковых значений нет.
Причина, по которой я спрашиваю это - в моих все данные примерно такого вида: 7.1439583 или 12.93878974.
Весма утомительно осуществлять поиск похожих значений даже через функцию COUNT. Будут какие-то идеи?

* (Ответ) Размещён в SPSSX-L, автор: Raynald Levesque, 30.10.2002.
* Примеч.: настоящее пиршество для *любителей макросов* (рекурсивный макрос - А.Б.).

DATA LIST LIST /var1 var2 var3 var4.
BEGIN DATA
1 2 3 3
1 2 3 4
1 1 2 2
1 1 1 1
3 3 2 2
. . 1 2
4 1.7 2 1.7
END DATA.
LIST.

* Отмечаем накопленной суммой все наблюдения, где хоть какие-то переменные имеют хоть какие-то идентичные значения.

*////////////////////.
DEFINE !test(listvar=!CMDEND)

!IF (!listvar !NE !NULL) !THEN
 !LET !testval=!HEAD(!listvar)
 !LET !other=!TAIL(!listvar)
 !DO !var !IN (!other)
-  COMPUTE flag=SUM(!var = !testval, flag).
 !DOEND
!test listvar=!other.
!IFEND

!ENDDEFINE.
*////////////////////.

SET MPRINT=yes.
COMPUTE flag=0.
!test listvar=var1 var2 var3 var4.
SET MPRINT=no.
COMPUTE flag2=MIN(flag,1).
EXECUTE.

* Flag2 = 1 когда любые из переменных var1 - var4 имеют идентичные значения.