* Тема: Замена пропусков средним значением по наблюдению. * Ключевые слова: пропущенные значения, макрос, макроаргументы. * Опубликован: 09.03.2008. * Автор: Ray. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/WorkWithMissing/ReplaceMissingWithMean.txt (.sps). *(Вопрос) Автор вопроса как-то прислал мне следующий макрос (тогда в нём отсутствовали первые 4 строки после его определения). Макрос заменяет пропущенные значения величинами, полученными при усреднении значений остальных переменных в данном наблюдении (переменные указываются при вызове макроса). Причем замена происходит при определенных условиях. Технически вопрос следующий: передаваемый набор аргументов (имен переменных) в ходе обработки надо трансформировать так, чтобы между ними появились запятые. *(Ответ) Размещен в SPSSX-L 04.11.2002. Автор: Ray; веб-сайт www.spsstools.net . * Необходимые преобразования над аргументами делают добавленные 4 строчки в начале макроса (!LET - !DOEND). * В конце макрос подсчитывает сумму значений в тех наблюдениях, где производились замены. * Пример файла данных не приводится. * Исходный макрос видоизменен так, что замена пропусков происходит лишь в том случае, когда число пропущенных значений в наблюдении не превосходит 75% от числа указанных переменных - А.Б. * Проставить запятые между аргументами может потребоваться, например, для использования списка переменных в некоторых функциях (SUM и др.) - А.Б. SET MPRINT=no. define impute (!positional !enclose ('(',')')) !LET !varlist=!HEAD(!1) !DO !var !IN (!TAIL(!1)) !LET !varlist=!CONCAT(!varlist,',',!var) !DOEND COUNT #mitems = !1 (MISSING). COUNT #items = !1 (lo thru hi). compute #diff = #mitems /(#mitems+#items). DO IF (#diff LT .75). compute #FILL = MEAN(!varlist). DO REPEAT x = !1. if missing(x) x = #fill. END REPEAT. compute scale1 = SUM(!varlist ). END IF. EXECUTE . !enddefine. ******************************************************************. SET MPRINT=yes. * ВЫЗОВ макроса impute (q2a q2b q2c q2d q2e).