Крис, Есть несколько способов решить эту задачу. Принципиально различных. Уверен, что есть и другие способы также, но эти пришли мне на ум сейчас. С уважением, David Marso Консалтинговая служба SPSS -------- ************************************************** * Метод, сравнивающий значение каждой переменной со значениями * предыдущих переменных, уничтожающий дубликаты * и подсчитывающий число оставшихся кодов. **************************************************. data list free/ id prog1 prog2 prog3 prog4 prog5. begin data 001 345 345 876 509 345 002 . 220 220 . 350 end data. * Копируем массив * . VECTOR P=PROG1 TO PROG5 / #TMP(5). LOOP #I=1 to 5. + compute #TMP(#I)=P(#I). END LOOP. * Сравниваем с предыдущими переменными *. LOOP #I=2 to 5. + LOOP #J=1 TO #I-1. + IF #TMP(#I)=#TMP(#J) #TMP(#I)=$SYSMIS. + END LOOP IF MISSING(#TMP(#I)). END LOOP. COMPUTE N=NVALID(#TMP1 TO #TMP5). EXECUTE. ************************************************** * Метод, реструктурирующий файл данных * * (создаётся несколько записей на одного студента) * * с последующим аггрегированием *. **************************************************. data list free/ id prog1 prog2 prog3 prog4 prog5. begin data 001 345 345 876 509 345 002 . 220 220 . 350 end data. *сохраняем файл для последующего слияния *. SAVE OUTFILE 'TMP'. VECTOR PROG=PROG1 TO PROG5. loop P=1 to 5. compute program=PROG(P). DO IF NOT (MISSING(PROGRAM)). XSAVE OUTFILE 'PROG' / KEEP ID PROGRAM. END IF. END LOOP. EXECUTE. GET FILE 'PROG' . AGGREGATE OUTFILE * / BREAK ID PROGRAM / N=N. AGGREGATE OUTFILE * / BREAK ID / N=N. MATCH FILES FILE 'TMP' / FILE * / BY ID. EXECUTE. Chris Conway пишет: > > Задаю вопрос по просьбе коллеги: > > Я работаю с файлом регистраций студентов. Запись для каждого отдельного студента > может содержать до 5 регистраций студента в разных программах. Для каждой из 5 возможных > регистраций заведена отдельная переменная. > > Таким образом, структура примерно такая: > > ID prog1 prog2 prog3 prog4 prog5 > > ID и prog1 - prog5 - числовые переменные. Имеются пропуски. > Мне надо определить, в скольки уникальных программах был зарегистрирован каждый студент. > > Например, для следующих двух записей будет 3 уникальных программы > и 2 уникальных программы, соответственно: > > (id) (prog1) (prog2) (prog3) (prog4) (prog5) > 001 345 345 876 509 345 > 002 220 220 350 > > Буду признателен за любую помощь. > > Спасибо, Chris Conway