*(Вопрос) Предыдущее решение хорошо, если есть лишь одна переменная, у которой есть пустая категория. К сожалению, у меня есть 12 баз данных с 5-20 переменными в каждой. Каждая переменная имеет один и тот же набор возможных значений (категорий): 0.05, 1, 2, 3, 4, 5, 6, 7. Есть способ так автоматизировать процесс построения графиков с пустыми категориями, чтобы не надо было каждый раз перед их построением строить таблицы частот, выявлять пустые категории, создавать отдельные файлы для каждой категории и т.д.? *(Ответ) Размещён в SPSSX_L 06.12.2001 rlevesque@videotron.ca. * Вот в некоторой степени общее решение. Вам не нужно знать наперед ни имена переменных с пустыми категориями, ни значения пустых категорий перед вызовом макроса. * Вы вызываете макрос один раз для отдельного файла данных. (Если у вас много файлов данных, можете оптимизировать этот макрос, добавив возможности, описанные в разделе этого сайта "Работа с большим количеством файлов данных" для ещё большей автоматизации процесса). * В случае, если в файле данных встречаются строковые переменные, то появляются ошибки, но их можно просто игнорировать. * Идея данного синтаксиса состоит в том, что мы создаём временные файлы с одним наблюдением в каждом и в этом файле всем переменным приписываем сначала одно значение из возможных (0.05, 1, 2, 3, 4, 7), потом второе, потом третье и т.д. Взвешиваем их с малым весом и потом из каждого файла "подшиваем" эти фиктивные наблюдения к основному файлу данных - А.Б. SET MPRINT=yes. *//////////////////////. DEFINE !fill (filenam=!TOKENS(1) /vlist=!CMDEND) GET FILE=!filenam. N OF CASES 1. !LET !cnt=!NULL !DO !val !IN (!vlist) DO REPEAT var=ALL. + COMPUTE var=!val. END REPEAT PRINT. !LET !cnt=!CONCAT(!cnt,!BLANK(1)) COMPUTE wgt=.00001. XSAVE OUTFILE=!QUOTE(!CONCAT('c:\\temp\\temp',!LENGTH(!cnt),'.sav')). !DOEND EXECUTE. GET FILE=!filenam. COMPUTE wgt=1. !LET !cntend=!LENGTH(!cnt) /* Добавляем фиктивные наблюдения к исходному файлу данных */ !DO !cnt1=1 !TO !cntend ADD FILES FILE=* /FILE=!QUOTE(!CONCAT('c:\\temp\\temp',!cnt1,'.sav')). !DOEND EXECUTE. !ENDDEFINE. *//////////////////////. SET MPRINT=yes. * Вызов макроса для создания первого файла данных. !fill filenam='C:\\program files\\spss\\employee data.sav' vlist=.05 1 2 3 4 7. * Показываем, что это сработало. FORMAT jobcat minority (F8.2). WEIGHT BY wgt. * Вызов Basic Tables. TABLES /FORMAT BLANK MISSING('.') /TABLES jobcat BY minority > (STATISTICS) /STATISTICS count( ( F5.0 )). FREQUENCIES VARIABLES=jobcat /ORDER= ANALYSIS . * Внимание: Использование команды Crosstab не даст вам пустых ячеек, т.к. эта процедура округляет веса перед построением таблицы.