Рассылка закрыта
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Статистика в SPSS: за пределами кнопочного интерфейса. Выпуск 25
В рассылке используются материалы веб-сайта
www.spsstools.ru
Содержание выпускаНовое на сайте www.spsstools.ru Здравствуйте, уважаемые подписчики! За прошедшие две недели график выхода рассылки был серьёзно нарушен, и я настроен ликвидировать задолженность подготовкой сразу трёх выпусков на этой неделе. Посмотрим, что из этого получится. Отчасти сбои в выходе рассылки были связаны с тем, что с 26.06 по 02.07 я принимал участие в семинаре, организованном Независимым институтом социальной политики (www.socpol.ru), который был посвящён возможностям работы с Единым архивом социологических данных и интерактивным on-line пакетом анализа данных NESSTAR. Пользуясь случаем, хочу обратить внимание подписчиков, так или иначе связанных с изучением российского общества (политологов, социологов, демографов), на деятельность Единого архива. Для научно-исследовательских и образовательных задач данные (в формате SPSS, кстати) предоставляются бесплатно. Выборки, в основном, общероссийские. Качество данных гарантируется известными именами депозиторов архива: ВЦИОМ, ФОМ, ИС РАН, Левада-центр, COMCON и др. Какие-то данные будут интересны и маркетологам, например, Российский индекс целевых групп (Target Group Index, TGI), автор исследования - COMCON. Архив приглашает к сотрудничеству как пользователей данных, так и депозиторов (в том числе и региональных). Это позволяет надеяться на то, что коллекции архива будут расширяться и в дальнейшем за счёт пополнения новыми тематическими исследованиями и обновлениями регулярных мониторингов. Адрес архивной системы: sofist.socpol.ru. Добавлю, что семинар отличался высокой культурой организации и комфортом для участников, был информационно насыщенным и полезным как в плане общения с ведущими семинара, так и с участниками, все из которых были очень интересными и приятными людьми. Команда WRITE. Общие сведенияВ следующем выпуске рассылки я планирую разобрать недавно добавленный синтаксис (макрос) для "дихотомизации" номинальных/порядковых переменных перед проведением, например, регрессионного анализа или для любых других контрастных сравнений. Макрос исключительно практический. Но его подробное описание обещает быть слишком объёмным вследствие сочетания в нём нетривиальной идеи и разнообразных команд. Поэтому я решил выделить в отдельный выпуск описание одной из компонент этого макроса, а именно - технологии создания файлов синтаксиса "на лету" с помощью команды WRITE.
WRITE: зачем оно нужно? В общем, команда WRITE предназначена для записи содержимого файла данных во внешние файлы в некотором фиксированном формате. Характерным применением команды WRITE является создание текстового или двоичного файла с данными, которые потом могут быть прочитаны другими приложениями. Однако, возможность управления перечнем, форматом и порядком переменных для экспорта и возможность использования пользовательских строк для оформления файла в сочетании с тем, что команда WRITE относится к командам трансформации, не вызывающим проход по данным, обеспечивает WRITE очень широкое применение. Ещё одна особенность команды WRITE заключается в том, что будучи вызванной единственный раз, она выполняет указанное в ней действие отдельно для каждого наблюдения файла данных. То есть, действует она подобно знакомой всем команде COMPUTE. После того, как команда исполнилась и правила трансформации были определены, непосредственно трансформации запускаются дополнительной командой EXECUTE, либо другой процедурой, вызывающей проход по данным (например, статистической процедурой). Указанные обстоятельства позволяют, во-первых, использовать WRITE, например, в циклических структурах вида LOOP - END LOOP, которые не допускают внутри себя выполнения отложенных вычислений, а во вторых - позволяют строить файлы синтаксиса, содержимое которых определяется содержимым файла данных. Разберём несколько примеров использования WRITE чтобы проиллюстрировать сказанное выше. Будем работать с файлом данных следующего вида: DATA LIST LIST /id var1 var2. BEGIN DATA END DATA.
Вывод данных в окно результатов и внешний текстовый файл Простейшая спецификация команды WRITE / ALL. EXECUTE. выведет в окно результатов содержимое файла данных, заданное выше между командами BEGIN DATA - END DATA, причём в формате, определённом для всех переменных по умолчанию (F8.2), т.е. на каждую переменную по 8 колонок. Число, порядок и формат выводимых переменных можно изменить, расширив синтаксис команды: WRITE / var1 (F2.1) id (F2.0). EXECUTE. Обратите внимание, первое значение первой переменной var1 (123.1) не уложилось в формат "2 знака" и было показано двумя звёздочками. Десятичных знаков вообще не было показано (хотя запрашивался один), так как сначала SPSS использует всю доступную ширину для отображения целой части числа. Последнее значение переменной id (12) "прилипло" к предыдущему столбцу. Это иллюстрирует, что пробелы между колонками переменных, которые мы видели раньше, получаются не из-за того, что SPSS их вставляет между переменными, а формируются за счёт заданного формата отображения переменных. При необходимости пробелы могут быть вставлены "вручную" (а точнее - помещением строки ' ' между именами переменных в списке). А туда, куда можно вставить пробелы, можно поместить и любую другую строку: WRITE / id ' ' var1 (F5.1) ' var2= ' var2 (F4.1). EXECUTE. Запись в файле данных, относящуюся к одной и той же строке (наблюдению), можно представить несколькими строками в выдаче, указав более одного набора переменных (после знака "/"): WRITE table / id (F2.0) ' var1 = ' var1 EXECUTE. Дополнительное ключевое слово TABLE предварит вывод значений переменных справкой о форматах переменных и позициях в данных (номер записи и координаты колонок), которые относятся к каждой из них. WRITE TABLE / id (F2.0)' var1 = ' var1 EXECUTE. Если необходимо направить вывод WRITE в файл, необходимо задать параметр OUTFILE с кратким или полным путём к файлу вывода. WRITE OUTFILE='c:\temp\mywrite.txt' TABLE /ALL. EXECUTE. Отметим, что справка TABLE в файл не записывается, а выводится лишь в окно Output. Просмотрите содержимое получившегося файла в каком-нибудь текстовом редакторе. Возможно указание "машинных" форматов. Например, WRITE OUTFILE='c:\temp\mywrite.txt' TABLE /id (PIBHEX2). EXECUTE. запишет переменную id в шестнадцатеричном формате.
Создание файлов синтаксиса Поскольку команда WRITE допускает вставку текстовых строк, с её помощью можно создавать текстовые файлы с командами синтаксиса, которые затем могут быть вызваны на исполнение с использованием инструкций INCLUDE или INSERT, выполняющих в текущей сессии SPSS синтаксис из внешнего файла данных. Разберём простейший пример. Этот синтаксис создаст новый синтаксис, который, будучи исполненным, определит новую переменную nv и присвоит ей значение 1. TEMPORARY. N OF CASES 1. WRITE OUTFILE='c:\temp\mywrite.sps' /'COMPUTE nv=1.' EXECUTE. INCLUDE 'c:\temp\mywrite.sps'. Необходимость временно (TEMPORARY), до первого прохода по данным, отбросить все наблюдения в файле данных кроме одного (первого), связана с тем, что синтаксис, помещаемый в файл .sps должен быть записан там лишь один раз. Если бы команда "N OF CASES 1." отсутствовала, синтаксис, заданный в качестве параметра команды WRITE, повторился мы там 4 раза (по числу наблюдений в файле). Обратите внимание, команда EXECUTE перед инструкцией INCLUDE совершенно необходима. Если её убрать, то файл mywrite.sps к моменту вызова INCLUDE просто не будет создан! Более интересный эффект можно получить, если в полной мере воспользоваться возможностями WRITE комбинировать текст и значения данных при записи в файл. Появляется возможность создания синтаксиса, зависящего от данных. Например, следующий синтаксис генерирует файл синтаксиса, который, будучи исполненным, строит для каждого значения переменной var2 таблицу со статистикой по тем значениям переменной var1, которые меньше текущего значения var2. WRITE OUTFILE='c:\temp\mywrite.sps' /'TEMPORARY.' EXECUTE. INCLUDE 'c:\temp\mywrite.sps'. Ясно, что команду WRITE можно использовать во всех случаях, когда результирующий синтаксис должен зависеть от конкретных данных в файле. В следующем выпуске мы рассмотрим, как используется команда WRITE в контексте макропроцедур и, возможно, список вещей, которые "невозможно сделать в SPSS" для кого-то станет ещё короче... В заключение выпуска отмечу, что у команды WRITE существует "команда-близнец" PRINT. На первый взгляд, то, что она делает, целиком совпадает с действиями WRITE. И в самом деле, почти для всех приведённых примеров вы можете заменить слово WRITE на слово PRINT, и, вероятно, не заметите каких-либо изменений. ("Почти" будет разъяснено чуть ниже.) PRINT точно так же выводит данные в окно результатов и во внешний файл. Принципиальное различие состоит в том, что по умолчанию команда PRINT оперирует с print-форматами переменных, а команда WRITE - с write-форматами. Тут мы выходим на обсуждение достаточно объёмного вопроса о форматах переменных и способах их задания. Скажу, не вдаваясь в подробности, что у переменной в SPSS в так называемом "словаре данных" (dictionary), содержащем мета-данные (описания переменных), могут быть заданы два формата. Один (print) связан, главным образом, с выводом переменной в результатах. Второй (write) - главным образом, с записью переменной в файл. Обычно мы задаём сразу оба этих формата для переменной. Например, так: FORMATS var1 (F4.0) var2 (F5.1).
WRITE /var1 var2. EXECUTE.
PRINT /var1 var2. EXECUTE. Выдачи WRITE и PRINT практически совпадают, так как совпадают форматы отображения и записи. Наблюдательный читатель, впрочем, заметит, что по умолчанию PRINT добавил пробел между колонками переменных, а также пропечатал точку на месте пропущенного значения (пробел добавляется автоматически, если только не указан дополнительно формат переменной). WRITE сработал "строже", не добавив никакой "отсебятины". PRINT, таким образом, ориентирован на более наглядное отображение данных. Автоматическое добавление знаков командой PRINT играет с пользователем злую шутку при записи синтаксиса в файл. Команды начинаются не с первой колонки текстового файла, а со второй, и не могут быть исполнены в пакетном (batch) режиме. Этим и объясняется "почти" полная возможность замены команды WRITE командой PRINT. Для формирования синтаксиса использование WRITE предпочтительнее. Различия будут и в том случае, если отдельно задать print- и write-форматы: WRITE FORMATS var1 (F10.1) var2 (F10.1). PRINT FORMATS var1 (F4.0) var2 (F5.1).
WRITE /var1 var2. EXECUTE.
PRINT /var1 var2. EXECUTE. Разница налицо. Отметим, что в редакторе данных в представлении Variable View отображаются как раз форматы print, а write-форматы скрыты и могут быть изменены через синтаксис. Впрочем, даже при заранее заданных различных форматах, вывод команд WRITE и PRINT может быть почти унифицирован путём задания форматов непосредственно при вызове: WRITE /var1 var2 (2(F6.1,2X)). EXECUTE. *Здесь 2X добавляет по 2 пробела после каждой переменной.
PRINT /var1 var2 (2(F6.1,2X)). EXECUTE. Этот выпуск завершён. До новых встреч!
Ведущий рассылки, Балабанов Антон Новое на сайте www.spsstools.ruПереведены и добавлены примеры синтаксиса: Переименовать переменные автоматически.SPS Автоматическое переименование или копирование переменных.SPS Поменять формат у 600 переменных.SPS Создание фиктивных переменных.SPS
Переведены и добавлены примеры скриптов: Раздел "Работа с редактором данных (объект ISPSSDataDoc)" целиком © См. www.spsstools.ru, 2005-2006 |
В избранное | ||