Удаление дубликатов в пределах одного наблюдения
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 60 61 62 63 64 | * Удаление дубликатов в пределах одного наблюдения. * Макрос полезен, если требуется удалить дублирующие значения в пределах одного наблюдения. * В примере, приведённом ниже, третье наблюдение имеет дубликат 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. |