* Удаление дубликатов в пределах одного наблюдения.
* Макрос полезен, если требуется удалить дублирующие значения в
пределах одного наблюдения.
* В примере, приведённом ниже, третье наблюдение имеет дубликат 11 в
переменных c и d. Макрос удалит это значение из переменной d.
* По умолчанию, макрос создаёт также новую переменную "miss",
в которой отмечает наблюдения, не имеющие валидных значений для всех переменных,
указанных при вызове макроса. Другое имя переменной может быть указано
макросу через параметр zm.
* Значение 0 в данном макросе означает пользовательское пропущенное значение (примеч. перев.).
* Автор: Maciek Lobinski, макрос передан Рею 24.05.2002.
data list list /a b c d.
begin data
5 7 0 0
5 9 10 5
5 7 11 11
6 7 10 8
6 7 13 4
5 7 9 6
1 13 14 1
. . .
1 7 13 1
2 2 2 7
end data.
define duble (!positional= !charend('|')
/zm =!default(miss) !TOKENS(1)) .
!let !ciag=''.
!let !jeden=''.
!let !dwa=''.
recode !1 (0=sysmis).
!do !i !in (!1).
!let !jeden=(!i).
!do !j !in (!1).
!let !dwa=(!j).
!if (!jeden<>!dwa) !then
if (!i=!j) !j=$sysmis.
!ifend.
!doend.
!doend.
!do !i !in (!1).
!let !ciag=!concat(!ciag,',',!i).
!doend.
!let !ciag=!tail(!ciag).
if (nvalid(!ciag)=0) !zm=0.
value labels /!zm 0'missing case'.
!enddefine.
* Пример.
duble a b c d.
EXECUTE.
* или так.
duble a b c d |zm=myvar.
EXECUTE.