Скрипты — сверхмощное средство!
- Введение в SPSS-скрипты (также известные как SAX Basic);
- Перечень примеров скриптов;
- Примеры скриптов;
- Программы на Visual Basic (VB).
Введение
Скрипты, или сценарии — достаточно свежая струя в развитии SPSS. Если вы никогда не использовали Visual Basic (VB) или Visual Basic for Applications (VBA), изучение данной возможности программирования покажется вам нелёгким занятием. SPSS использует Sax Basic, разработанный компанией Sax Software. Добавив библиотеку типов (свойств и методов) Sax (Sax's Type Library) в вашу обычную среду разработки (например, VB6, Excel или Access), вы можете создавать сценарии SPSS, используя привычные средства. Таким образом, язык Sax Basic отличается от обычного Visual Basic лишь специальной библиотекой типов.
Скрипты позволяют пользователю сделать то, что нельзя сделать с помощью синтаксиса, например, отформатировать интерактивный график IGRAPH или создать обработчик ошибок. Когда это возможно, я предпочитаю использовать синтаксис вместо скриптов. По мере того, как моё знание синтаксиса росло, я открывал пути делать такие вещи, которые раньше мог делать только через скрипты, например, экспортировать или создать переменную, которая имеет те же метки значений, что и другая переменная. В то время, как синтаксис обрабатывается командным процессором SPSS, скрипты обрабатываются на уровне графической оболочки приложения и оперируют её объектами (документами), их свойствами и методами.
Скрипты могут быть вызваны из синтаксиса и наоборот. Однако важной особенностью здесь является параллельность (или асинхронность) выполнения вызванной программы. Так, например, синтаксис, вызывающий скрипт, не приостанавливается до окончания работы скрипта, а продолжает своё выполнение. При таком параллельном (несогласованном, асинхронном) исполнении этих двух процессов, возможно возникновение ошибок, если в ходе выполнения процессы должны обмениваться данными. Например, синтаксис может попытаться обратиться к результатам работы скрипта в то время, когда второй ещё выполняется (результаты отсутствуют). В некоторых случаях возникновение ошибок будет вовсе не очевидным и пользователь будет озадачен тем, что программа работает без видимых сбоев, но даёт неверные результаты! Таким образом, при комбинировании синтаксиса и скриптов нужно учитывать указанное обстоятельство и составлять программу соответствующим образом. Спасибо Кириллу Орлову за комментарии по данной теме для посетителей русской версии сайта.
Fabrizio Arosio разработал скрипт (см. раздел Утилиты ниже), который заставляет выполнять исходный код и вызываемый скрипт в синхронном режиме (последовательно, один за одним). Эта утилита работает, однако вы должны следить за тем, чтобы в конце синтаксиса не оставалось замыкающих пробелов (иначе возникает бесконечный цикл). См. также раздел «Об асинхронности» для получения дополнительной информации.
Важно отметить, что в версиях SPSS для Макинтош (Mac) скрипты использовать нельзя.
Перечень примеров скриптов
Скрипты сгруппированы по следующим темам:
- Автоскрипты
- Работа с редактором данных (объект ISPSSDataDoc)
- Диалоги
- Распределения
- Работа с простым окном результатов (Draft Output)
- Величина эффекта
- IGRAPH (интерактивные графики)
- Импорт и экспорт (см. также соответствующий раздел синтаксиса)
- Работа с метками переменных и значений (см. также соответствующий раздел синтаксиса)
- Длинные имена переменных (требует версии 12+)
- Форматирование выдачи
- Работа с окном результатов (Output)
- Печать
- Мобильные (сводные, pivot) таблицы
- Редактор синтаксиса
- Специальные операции над данными
- Утилиты
- Работа с несколькими файлами (см. также соответствующий раздел синтаксиса)
Покажите мне данные, и я найду там ошибки!
Примеры скриптов
NB: Файлы со значком
добавлены или обновлены менее 30 дней назад.
Автоскрипты
- Автоматизация отладки.SBS Упрощает отладку автоскриптов
- Выделение итога в таблице SUMMARIZE или вставка разрыва страницы.SBS Это пример того, как синтаксис передаёт аргумент в автоскрипт. Такая возможность может быть очень полезной. Проверьте работоспособность с помощью этого синтаксиса.
Работа с редактором данных (объект ISPSSDataDoc)
- Отформатировать длину переменных.SBS Автоматически изменяет длину строковых переменных в любом sav-файле на длину таких же переменных из шаблонного sav-файла
- Создать пустой файл данных с n строчками.sbs (n определяет пользователь при запуске)
- Отобразить число наблюдений и переменных в файле данных.SBS
- Найти число наблюдений.SBS (работает и для взвешенных файлов)
- Загрузить данные и показать значения переменных во всплывающем окне.SBS
- Установить ширину колонок в редакторе данных по ширине переменных.sbs
- Разделить текущие данные на n групп.sbs (n определяет пользователь при запуске)
Диалоги
- Запрос имени файла у пользователя;
- Определение макроса с рабочей папкой по заданному пользователем имени файла;
- Запрос финансового года и запуск синтаксиса с этим параметром;
- Запрос имени пользователя и создание макроса с именем пользователя;
- Работа со списком переменных (1) (с сайта SPSS);
- Работа со списком переменных (2) (с сайта SPSS);
- Работа со списком переменных (3) (с сайта SPSS).
Распределения
- Графики распределений;
- Генерация и подгонка распределений случайных величин;
- Генерация случайных переменных (нормальное и равномерное распределения, асимметрия, корреляции, округление, пропущенные значения).
Работа с простым окном результатов (Draft Output)
Величина эффекта
- Раздел синтакса «T-критерии, средние, дисперсионный анализ» содержит несколько примеров вычисления величины эффекта.
IGRAPH (интерактивные графики)
- Изменить цвет фона у всех интерактивных графиков в окне результатов.SBS
- Изменить цвет столбцов у всех интерактивных графиков без группирующих переменных.SBS
- Экспортировать все интерактивные графики в jpeg указанного размера.SBS
- Экспортировать выделенный интерактивный график в jpeg указанного размера.SBS
- Формат графика IGRAPH.SBS
- Формат графика IGRAPH.SPS (этот синтаксис создаёт данные, два графика и вызывает вышеприведённый скрипт)
Импорт и экспорт
- Импорт из SPSS через VBA в ACCESS.mdb Это файл MS Access 2000. См. инструкции в модуле GetSPSSvars.
- Экспорт меток из MS Access в SPSS.txt Это код на Visual Basic.
…редактор данных (Data Editor):
- Сохранить все вложения в указанную директорию.SBS (Это VB-скрипт для Outlook) Обрабатывает все сообщения в заданной папке.
- Отправить документ в качестве вложения по электронной почте.SBS Этот скрипт SaxBasic использует Outlook 2000 чтобы отослать сообщение со вложением заданному адресату. Вложением может быть HTML-файлом, созданным SPSS, или spo-файлом, или любым другим документом.
- Конвертация в формат Excel 5/95.SBS Ранние версии SPSS могли экспортировать данные в формат Excel 2.1; это — автоматическая конвертация в формат Excel 5/95.
- Экспорт таблиц на лист MS Excel.sbs
- Экспорт таблиц на лист MS Excel v2.sbs Тот же экспорт с последующей группировкой строк. Очень удобно.
- Экспорт таблиц на лист MS Excel v3.sbs Аналогия с предыдущим, но добавлена опция экспорта графиков.
- Экспорт таблиц на лист MS Excel v4.sbs Развитие v3 — эта версия экспортирует все слои в сводных таблицах.
- Экспорт всех сводных таблиц из всех файлов spo в файлы HTM.SBS
- Экспорт целевых объектов из всех файлов spo в файлы HTM.SBS (это расширение предыдущего скрипта. Данная версия поддерживает выбор объектов IGRAPH)
- Экспорт сводных таблиц (Pivot Tables) в PowerPoint.SBS
- Добавление/обновление данных из Excel в диаграмму PowerPoint.ZIP (845 Кб) Эта VB .NET-программа (автор Кирилл Орлов) для тех, кто наполняет графики PowerPoint данными из Excel (например, данными сводных таблиц, импортированных в Excel из SPSS output). Файл справки имеется.
- Из SPSS в STATA (англ.). Автор: Alasdair Crockett. Имеется Руководство по экспорту (англ.), объясняющее, как использовать этот скрипт. Ссылки даны на оригинальные (английские) версии документов, которые, скорее всего, не будут переводиться на русский язык, поскольку с 14 версии SPSS имеет встроенный импорт/экспорт файлов Stata.
- Экспорт метаданных (словаря SPSS) в текстовый файл (автор — Jean-Francois Allaire);
- Экспорт сводных таблиц в Word (скрипт, разработанный корп. SPSS, с дополнительным форматированием таблиц от John Hendrickx);
- Экспорт .sav-файла в свободный текстовый формат;
- Экспорт видимой выдачи в Word через HTML (можно указать, импортировать ссылки на графики, или встраивать графики в документ как картинки);
- Экспорт файла данных SPSS в XML-файл (спасибо автору — Tom Diericks. Доп. информацию по XML см. на xmlfiles (англ.), в Википедии (рус.). Примеч: скрипт требует Microsoft XML parser не ниже версии 3.0. Можно загрузить с сайта Microsoft. Для версий SPSS от 11.0 и выше см. комментарий в тексте скрипта;
- Экспорт в Triple-S (скрипт создаёт XML-файл для Triple-S v1.2 и соответствующий .dat-файл из текущего файла данных SPSS). Спасибо автору — Chris Johnson;
- Экспорт данных из SPSS в Pulsar Beta 0.16 (спасибо Александру Бугакову). Скрипт основан на предыдущем решении от Криса Джонсона;
- Экспорт выдачи SPSS в формат XML.
Работа с метками переменных и значений
- Сделать приставку к именам всех переменных;
- Добавить слово «index» (или любое другое) в начало метки каждой переменной;
- Добавить метки значений вида «месяц, год»;
- Добавление календарных меток с помощью цикла и функции DateAdd;
- Вставка имени переменной в начало её метки;
- Назначение переменным меток, совпадающих с их именами (может быть реализовано через синтаксис);
- Запись меток переменных и значений заглавными буквами;
- Обеспечить отдельный вызов макроса для каждой метки значения данной переменной (очень полезный программистский приём);
- Определить макросы с метками переменных (можно реализовать и через синтаксис);
- Удалить метки значений у всех переменных;
- Экспорт меток переменных и значений в несколько текстовых файлов (спасибо Wouter Egberink, который прислал мне этот код)
- Экспорт имён и меток переменных в .txt-файл для импорта в MS Access;
- Копировать метки значений одной переменной в другую переменную (можно реализовать и через синтаксис);
- Удалить подписи строк и столбцов в таблице (перемещено в раздел Мобильные таблицы);
- «Обратный» AUTORECODE. Создание новой строковой переменной, значения которой являются метками соответствующих значений исходной (можно реализовать и через синтаксис). Решение для версий SPSS, ранее 10.0, адаптировано мной (А. Б.) к современным версиям;
- «Обратный» AUTORECODE — схожая адаптация решения, представленного выше, в версии автора.
Длинные имена переменных
- Длинные — в короткие и короткие .por-имена — в длинные. Скрипты автоматизируют переключение между короткими и длинными вариантами именования переменных в разных ситуациях. Скрипты сопряжены с данным файлом синтаксиса. Автор: Jon Peck, см. источник (англ.).
Форматирование выдачи
Работа с окном результатов (Output)
- Добавить в нужных местах разрывы страниц перед печатью (скрипт автоматически вставляет разрывы страниц в выдачу, подготовленную с помощью этого синтаксиса, который можно настроить под свои задачи);
- Как сделать для каждого синтаксиса свой файл результатов (из AnswerNet);
- Изменить метку и заголовок последней вызванной процедуры (автор: Michael Wexler);
- Создание нового окна результатов с указанным именем файла;
- Запись имени файла данных (.sav) в нижний колонтитул документа результатов (.spo);
- Убрать таблицы «Statistics», «Notes» и «Сase processing summary»;
- Очистить рабочее окно результатов;
- Правка текстового блока выдачи (скрипт вызывается этим синтаксисом);
- Вставка текстового блока в редактор выдачи SPSS Viewer (с эмуляцией нажатия клавиш);
- Построение оглавления таблиц и замена табличных заголовков по оглавлению;
- Удаление символов разрыва страницы;
- Замена меток «Page Title» в «дереве» выдачи на содержимое заголовков от команды «TITLE» (упрощает ориентирование в большом файле выдачи SPSS);
- Сохранение результатов в файл с указанным именем. Скрипт вызывается этим синтаксисом;
- Сохранение результатов в файл с указанным (в скрипте) именем;
- Поиск по меткам объектов в окне результатов;
- Выделение последней таблицы в текущем окне результатов;
- Построение и вставка перечня заголовков таблиц в файл с результатами (output);
Мобильные (сводные, pivot) таблицы
- Вставка сноски в каждую мобильную таблицу;
- Применить некоторые команды скрипта ко всем мобильным таблицам;
- Автоматизация вращения (pivoting) мобильных таблиц (примеры манипулирования слоями, строками и столбцами);
- Автоскрипт для форматирования таблицы с корреляциями (удаляет элементы на главной диагонали и выше её, выделяет значимые корреляции, переносит информацию о размере выборок и уровнях значимости в слои); Спасибо Ферду Бриттону (Ferd Britton);
- Изменить формат выдачи процедуры Means (скрипт вызывается из этого синтаксиса);
- Поиск/замена текста в мобильных таблицах (дубликат). Удобно, например, для перевода стандартных меток на другие языки/другую систему именований;
- Замена «Sig» на «p=»;
- Объединение в одну графу: «среднее ± станд. откл. » (скрипт вызывается из этого синтаксиса);
- Создание мобильной таблицы (Pivot Table);
- Создание таблицы из результатов ROC-анализа (скрипт вызывается из этого синтаксиса);
- Вырезать некоторые строки. Cпасибо автору, Марку Бакстеру (Mark Baxter);
- Поочерёдная демонстрация всех слоёв таблицы;
- Определить пользовательские заголовки. Примеч.: для избежания проблем, связанных с асинхронностью, полезно изменить скрипт так, чтобы он работал разом со всем окном результатов после окончания расчётов;
- Удаление сносок во всех таблицах;
- Транспонирование (строки — в столбцы, столбцы — в строки) мобильной таблицы;
- Скрыть столбцы «Valid Percent» и «Valid» в таблице «Frequencies» (это дополнение к следующему ниже скрипту);
- Скрыть столбец в мобильной таблице;
- Подсветка значимых уровней во всех таблицах ANOVA в назначенном окне результатов. (содержит хороший технический пример организации прохода по всем элементам выдачи);
- Подсветка значимых уровней в таблице к t-проверке для двух независимых выборок;
- Курсивное начертание процентных показателей;
- Выключка заголовков мобильных таблиц влево/вправо/по центру;
- Выделение итогов жирным шрифтом (применяется к выделенной таблице, может изменять и другие параметры: цвет шрифта и фона, отступы и проч.);
- Выделение итогов во всех таблицах (аналогичен предыдущему скрипту, но обрабатывает все таблицы в назначенном окне результатов);
- Раскрытие каждого слоя таблицы перед обработкой (см. аналогичный скрипт выше)
- Удаление значка процентов из ячеек мобильной таблицы (фактически, задаётся другой числовой формат);
- Замена пустых ячеек данных пользовательской константой;
- Обратить порядок следования столбцов;
- Разворот внутренних меток столбцов на 90° во всех таблицах;
- Округление частот в перекрёстных таблицах до заданного разряда;
- Установить число знаков после десятичной точки (для всех ячеек или определённого столбца);
- Установить число десятичных знаков для процентов;
- Замена текста в таблицах по заданному перечню;
- Управление шириной столбцов «через синтаксис» (пояснения находятся в этом файле синтаксиса). (Спасибо автору — Jason Burke — за модернизацию прежнего решения!);
- «Светофор»: условное форматирование ячеек;
- «Светофор» с фиксированными границами (как предыдущий скрипт, но без диалогового окна);
- «Светофор» с тремя граничными значениями;
- Заменить процентный формат;
- Заменить «научный» (##.#E±##) формат (стандартная процедура из файла Global.SBS);
- Отменить группировку строк или столбцов;
- Выделение значимых уровней в таблицах;
- Удаление подписей всех строк и столбцов в выделенной таблице.
Печать
- Печать всех .spo-файлов из папки по маске;
- Печать текущего файла синтаксиса через MS Word (автоматически добавляются путь, дата, время, номера страниц. Удобно назначить данному скрипту кнопку на панели инструментов окна редактора синтаксиса);
- Печать пути к файлу данных в нижнем колонтитуле файла выдачи;
- Настройка параметров печати файла выдачи (может работать в паре с синтаксисом). Решение AnswerNet;
- Настройка параметров печати файла выдачи (2). Другой вариант взаимодействия с синтаксисом: настройки печати скрипт берёт из журнала синтаксиса;
- Настройка параметров печати файла выдачи (3). Упрощенный вариант настройки. Можно добавить верхний колонтитул, дату и время, номера страниц;
- «Тумблер» отображения номеров страниц при печати файла выдачи (.spo).
Редактор синтаксиса
- Закрытие всех окон редактора синтаксиса.SBS
- Конвертирование синтаксиса в скрипт.sbs
- Поиск/замена в окне редактора синтаксиса.sbs
- Вставка текста из скрипта в окно синтаксиса.sbs
- Запуск синтаксиса в пакетном (batch) режиме.SBS Нахожу этот скрипт очень полезным. Его удобно «привязать» к кнопке на панели инструментов редактора синтаксиса, чтобы иметь возможность пускать синтаксис на исполнение до первой ошибки.
- Создание синтаксиса, описывающего метки переменных и значений.SBS
Специальные операции над данными
Утилиты
- Добавить текущую дату ко всем файлам *.sav в заданной папке.SBS
- Ежечасная загрузка и обработка данных с экспортом результатов в HTML.SPS
- Автоматический запуск скрипта или синтаксиса при каждом запуске SPSS.SBS
- Вызов скрипта B из скрипта A.SBS
- Конвертация синтаксиса для вызова его из скрипта.SPS (автор — Rolf Kjoeller)
- Создание нового окна результатов (output).sbs
- DOS.sbs Это скрипт для запуска команды DOS или .bat-файла из синтаксиса; автор — Fabrizio
- Расстояние Левенштейна между двумя строками (скрипт работает в паре с данным синтаксисом);
- Работа с состоянием окна программы.SBS (сворачиваем и разворачиваем)
- Заготовка скрипта: выбор нужной процедуры в зависимости от переданного из синтаксиса параметра.SBS
- Включение даты из файла данных в имя этого файла.SBS
- Запуск скриптов из синтаксиса.sbs Скрипт написан Fabrizio для того, чтобы обойти проблему асинхронного выполнения скриптов. При запуске следует убедиться, в конце выполняемого синтаксиса отсутствуют лишние пробелы и пустые строки.
- Переключение выдачи между обычным и текстовым окнами результатов.sbs (автор — Karel Asselberghs)
- Доработка синтаксиса: расстановка точек-терминаторов.SBS
- Запись оглавления окна результатов в текстовый файл.SBS
Работа с несколькими файлами
(см. также соответствующий раздел синтаксиса)- Объединить все .sav-файлы из заданной папки.SBS (пользователь указывает путь и маску имени файла, скрипт делает остальное… В итоговый .sav-файл добавляется переменная, указывающая на файл-источник записей)
- Объединить все .sav или текстовые файлы из заданной папки.SBS Это расширение предыдущего скрипта. Данная версия может объединять либо .sav-файлы, либо файлы текстового формата. Также добавляется переменная, указывающая на источник каждой записи. Перед использованием следует подправить команду GET DATA под соответствующий формат текстового файла
- Конвертация всех файлов из папки в другой формат.SBS Может конвертировать…
из *sav в *.por
из *.por в *.sav
из *.sav в *.xls - Создать отдельный .sav-файл из каждого .txt-файла.SBS
- Экспорт всех сводных таблиц (и/или графиков) из всех .spo-файлов в файл .htm.SBS (обрабатываются файлы .spo, расположенные в заданной папке и удовлетворяющие заданной маске. На каждый .spo-файл создаётся отдельный файл .htm)
- Экспорт объектов заданных типов из всех .spo-файлов в .htm-файл.SBS (это развитие предыдущего скрипта; поддерживает кроме сводных таблиц и графиков ещё и объекты IGRAPH)
- Перечислить все файлы в указанной директории.SBS
- Единообразно обработать 17 архивированных .zip-файлов.SBS
Программы на Visual Basic (VB)
spssrun.exe
Автор программы: Alexis-Michel Mugabushaka из университета Касселя, Германия. Действие программы аналогично SPSS Production's facility. Вы «кормите» её перечнем файлов синтаксиса или указываете файл, содержащий такой перечень. Программа запускает файлы синтаксиса один за другим и создаёт отдельный для каждого синтаксиса файл выдачи, имеющий то же имя, что и файл синтаксиса. См. также Как сделать для каждого синтаксиса свой файл результатов.SBS
ViewSav
ViewSav — кодировочная таблица для файлов данных SPSS. Облегчает просмотр словаря и базовые манипуляции с описанием переменных. Автор программы: Karel Asselberghs с факультета социологии университета Амстердама. На его сайте есть ещё 2 утилиты SPSS: CRC32SAV и LISTSAV. Первая считает и сравнивает контрольную сумму для разных частей файла данных SPSS: заголовка, словаря и самих данных. Это позволяет вам проверить 2 файла с данными на абсолютную идентичность. Вторая утилита выводит переменные и метки их значений в один список (исходный код прилагается).







