Макросы SPSS

В начало FAQ Синтаксис SPSS Макросы в SPSS Скрипты в SPSS Интеграция SPSS с Python Советы Ссылки по SPSS

Возможности макросов в SPSS удивительны!

Макрос (macro), или макрокоманда — это пользовательское выражение в языке синтаксиса SPSS, вместо которого при интерпретации синтаксиса командный процессор подставляет текст, «спрятанный» в этой макрокоманде (и принимает вставленное как полноценный фрагмент кода, готовый к исполнению). Хитрость заключается в том, что этот текст может программно генерироваться по заданному пользователем алгоритму. Фактически, во время исполнения синтаксиса SPSS получает возможность генерировать новый синтаксис, например, «размножить» один и тот же блок кода, подставив в его копии разные параметры (имена переменных и проч.), а затем — исполнить все это. Такая возможность создаёт необычайную гибкость в оформлении пользовательских процедур обработки. В каком-то смысле макросы схожи с пользовательскими функциями в процедурных языках программирования. Но если пользовательские функции оперируют данными, макросы оперируют исходным кодом программы.

Макрос для синтаксиса всё равно, что синтаксис для стандартных оконных меню (GUI): большой шаг вперёд.

Макросы способны:

  • уменьшить количество строк кода на 80—90%
  • значительно упростить поддержку (модификацию) кода
  • ускорить разработку кода
  • упростить разработку нового кода на основе существующего
  • делать те вещи, которые не может делать синтаксис. Например, создавать новые переменные с новыми именами «на лету», используя !CONCAT(var,!cnt).

Если бы язык макросов ещё не существовал, SPSS следовало бы его изобрести. Постарайтесь изучить макросы! Не пожалеете.

Как только вы познакомитесь с принципами написания макросов, вы найдёте им множество применений. На данном сайте большинство примеров макросов находится в разделе Синтаксис (более 140 штук).

Если хотите приобрести хорошую книгу (IMHOУлыбка) по синтаксису и макросам, посмотрите SPSS Programming and Data Management (Программирование и управление данными в SPSS).

Если не знаете, как использовать макрос с этого сайта, посмотрите раздел на странице для новичков.

Совет: чтобы быстро находить макросы на этом сайте, добавляйте в строку поиска «!ENDDEFINE».

Перечень групп макросов

  1. Макросы: избранное (изящные решения)
  2. Макропеременные
  3. Самоуправляющиеся макросы
  4. Разное
  5. Утилиты
  6. Также посетите «Библиотеку макросов» на веб-сайте SPSS.

Мощность SPSS сложно переоценить!


Замечание: файлы со значком Новый ресурс! добавлены или изменены менее, чем 30 дней назад.

Чрезвычайно полезный для вас макрос не обязательно будет очень сложным. См. Мастер-класс по макросам для получения первичных сведений.


Полностью прокомментированный макрос

Переупорядочиваем имена векторов (этот макрос включён в группу Избранное выше)

Реорганизация имён векторных переменных в файлах данных. Это полезно, если у вас есть, скажем, векторы a1 TO a50, b1 TO b50, c1 TO c50 и вы хотите упорядочить их следующим образом: a1 b1 c1 a2 b2 c2 … a50 b50 c50.
Автор: Raynald Levesque 28.04.2001.

DATA LIST LIST /dummy.
BEGIN DATA
1
END DATA.
LIST.
 

* Следующие вектора расположены последовательно (т.е. сначала все "a", затем все "b", затем все "c").

NUMERIC id x y a1 TO a50 z1 b1 TO b50 z2 c1 TO c50 k.

* Скажем, хотим переупорядочить вектора как a1 b1 c1 a2 b2 c2 … a50 b50 c50.

SET MPRINT=no.
 
*//////////////////////.
DEFINE !reorder (id=!TOKENS(1)
   /beg !TOKENS(1)
   /end !TOKENS(1)
   /vnames !CMDEND)
MATCH FILES FILE=* /KEEP=!id !DO !i=!beg !TO !end !DO !var !IN (!vnames) !CONCAT(!var,!i," ") !DOEND !DOEND ALL.
!ENDDEFINE.
*//////////////////////.
 

* Пример вызова этого макроса.

SET MPRINT=yes.
!reorder id=id beg=1 end=50 vnames=a b c.

Пояснения.
Следующий формат записи поможет понять циклы !DO – !END в команде match выше:

*!DO !i=!beg !TO !end
* !DO !var !IN (!vnames)
* !CONCAT(!var,!i," ")
* !DOEND
*!DOEND
*ALL.

Замечания:
1. ALL означает сохранить все переменные, не названные до этого.
2. Макро цикл записан в одну линию, чтобы уменьшить количество строк кода в создаваемом файле синтаксиса.
3. Обратите внимание, что макро команды не нуждаются в разделителе (точке) в конце. В частности, если точки будут вставлены после

!DO !i=!beg !TO !end

например, макрос более не будет работать! Происходит это от того, что точка принудительно завершает выполнение команды MATCH FILES.

▲ наверх