makrodefinicje — co to takiego, czy i kiedy warto je stosować?

Transkrypt

makrodefinicje — co to takiego, czy i kiedy warto je stosować?
automatyzacja
Przemysław Budzewski
spss polska
makrodefinicje — co to takiego,
czy i kiedy warto je stosować?
W tym, oraz w kilku następnych odcinkach z serii artykułów dotyczących automatyzacji,
zajmę się przydatną właściwością języka poleceń pasw Statistics, a mianowicie zdolnością
do automatyzacji zapisu i wykonywania poleceń (lub sekwencji poleceń), najczęściej
w sytuacji zmieniających się parametrów wykonania. Odpowiadającą tej zdolności strukturę
polecenia nazywa się w pasw Statistics makrodefinicją, czy też w skrócie — makrem.
Definicja makra zamieszczana jest w obrębie poleceń define – !enddefine. W obrębie
tych poleceń należy zdefiniować:
 nazwę makra — słowo, przy pomocy którego makro będzie rozpoznawane i wywoływane
 argumenty makra — przypisujące określoną wartość w trakcie wywoływania makra
 treść makra — pełne lub fragmenty poleceń pasw lub/i opcje makra.
Dodatkowym elementem, który nie jest wprawdzie elementem makrodefinicji, niemniej jest
wymagany aby makro zwróciło wynik, jest wywołanie makra, w którego skład wchodzą
nazwa makra oraz wartości przypisywane poszczególnym argumentom makra.
rysunek 1.
Struktura makropolecenia
DEFINE desmakro (!POSITIONAL !TOKENS(3))
DESCRIPTIVES VARIABLES = !1
!ENDDEFINE .
desmakro var1 var2 var3 .
Uważny czytelnik zwróci uwagę na fakt, że w poprzednich numerach biuletynu makra były
już pokazywane. W tym artykule chciałbym skupić się na samym sposobie zapisu makra
(strukturze), jego wczytaniu i wywołaniu. Natomiast kolejne artykuły posłużą do prezentacji
szerokiego spektrum możliwości jakie z praktycznej perspektywy dają makrodefinicje.
Po co stosuje się makra? Zazwyczaj stosujemy je w trzech sytuacjach:
gdy chcemy zautomatyzować przeprowadzenie tej samej analizy na różnych zmiennych
lub różnych zbiorach danych
 gdy odpowiednie zestawy poleceń mają być uruchomione w zależności od wartości
parametru (raport roczny vs. raport kwartalny)
 gdy celem jest przeprowadzenie wielokrotnie zestawu czynności (np. pobranie próbki
danych, wyliczenie statystyk, podsumowanie wyników).

Makra w istotny sposób podnoszą efektywność operowania Syntaxem. Raynald Levesque
(„spss Programming and Data Management. A Guide for spss and sas Users”, s. 177)
podaje trzy zalety makrodefinicji, podnoszące efektywność pracy z pasw Statistics:
1. przyspieszają tworzenie kodu,
2. upraszczają utrzymywanie kodu,
3. ułatwiają ponowne posłużenie się kodem.
1. Przyspieszenie tworzenia kodu
Jedną z najistotniejszych zalet makrodefinicji jest to, że mechanizm ten pozwala użytkownikowi — w pewnym sensie — budować własne polecenia. Najczęściej takie polecenie
jest w pewien sposób przekształconym poleceniem pasw Statistics lub też składa się
z kilku poleceń występujących w sekwencji dostosowanej do potrzeb analizy. Aby takie
„meta–polecenie” mogło być wykorzystane, wystarczy je raz na sesję pracy z programem wczytać, by następnie móc je dowolną ilość razy przywoływać, czyli innymi
słowy — wykonywać. Ponieważ — co można zauważyć na Rysunku 1. — wywołanie makra
składa się jedynie z jego nazwy i, w tym przypadku, listy zmiennych, można powiedzieć,
że możliwość stosowania makrodefinicji istotnie wpływa na prędkość tworzenia kodu, gdyż
wydatnie skraca się on w porównaniu do wielokrotnego zapisu tego samego polecenia
lub sekwencji poleceń.
Np. makro zaprezentowane na początku tego artykułu po drobnej modyfikacji w argumentach makra:
DEFINE desmakro (!POSITIONAL !CMDEND)
DESCRIPTIVES VARIABLES = !1
!ENDDEFINE .
pozwala na zbudowanie tabel częstości dla dowolnej listy zmiennych. Po jego wczytaniu
(wczytanie makra polega na tym samym, co uruchomienie jakiegokolwiek innego polecenia pasw Statistics w edytorze poleceń — zaznaczamy makro i uruchamiamy) można
w dowolnym miejscu, w dalszej części skryptu wykorzystać wywołanie:
desmakro var1 .
lub
desmakro var1 var2 var3 var4 .
i w dalszej części np.:
desmakro doch wiek edu .
A zatem nie ma potrzeby wielokrotnie przywoływać polecenia descriptives variables — makro zrobi to za nas. Można się o tym przekonać poprzedzając wywołanie
makra następującym poleceniem:
SET PRINTBACK = ON MPRINT = ON .
Opcja PRINTBACK pozwala umieszczać w edytorze raportów komunikaty wykonania
poleceń w postaci obiektu o nazwie „Dziennik”, natomiast opcja mprint pozwala zapisywać w Dzienniku rozwinięcie każdego makra, dzięki czemu uzyskujemy kontrolę nad tym,
w jaki sposób pasw Statistics odczytuje makro w trakcie jego wywołania. Taki fragment
dziennika może wyglądać w następujący sposób:
set MPRINT = on .
desmakro2 var1 var2 var3 .
53 0 M>
54 0 M> .
55 0 M> DESCRIPTIVES VARIABLES = var1 var2 var3
56 0 M> .
2. Upraszczanie utrzymywania kodu
Dobrą praktyką jest zgromadzenie wszystkich makrodefinicji wykorzystywanych w analizie w jednym miejscu — może to być np. początek pliku .sps lub też odrębny plik .sps
przywoływany np. na starcie analizy przy pomocy polecenia insert. Czy często zdarza
się Państwu przeszukiwać Syntax w celu dokonania nawet drobnej modyfikacji, wyni2
kającej np. ze zmiany w danych źródłowych itp.? Dzięki makrodefinicjom nie jest to już
konieczne — wystarczy zmienić wartość argumentu w wywołaniu, lub też dokonać zmiany
w samej treści makra — w zależności od potrzeb, niemniej zmiana będzie zachodzić
zazwyczaj w jednym miejscu.
Jako przykład można tutaj podać proste makro podstawiające pewną wartość, np. wartość
miesiąca, do wskazanych poleceń:
DEFINE month ()
5
!ENDDEFINE .
Makro to może być przez nas wykorzystane np. w poleceniu wyboru obserwacji za dany
miesiąc.
SELECT IF miesiac = month .
EXECUTE .
Co zostanie odczytane jako:
SELECT IF miesiac = 5 .
EXECUTE .
Aby wybrać dane za inny miesiąc, wystarczy teraz wprowadzić zmianę tylko w jednym
miejscu, a mianowicie w treści makra month.
3. Ułatwienie ponownego posłużenia się kodem
Kod zapisany bez wykorzystania makrodefinicji jest niewątpliwie mało elastyczny. Wynika
to z prostego faktu, iż nazwy zbiorów, na których pracujemy, nazwy zmiennych oraz
konkretne wartości, do których się odwołujemy są w nim przywoływane wprost. Makra
pozwalają parametryzować te elementy, a zatem np. wartości w procedurze selekcji,
nazwy zmiennych wykorzystywanych do wyliczenia nowej zmiennej czy nawet nazwy
zbiorów danych, które poddajemy łączeniu można podać w postaci parametrów. Dzięki
temu raz napisane makro może być wykorzystywane wielokrotnie.
Te niewątpliwie pozytywne cechy pracy z makrodefinicjami przedstawione przez Raynald’a
Levesque wymagają jednak dodatkowego, nieco „studzącego”, komentarza.
Zagadnienia automatyzacji pracy
z pasw Statistics, w tym makrodefinicje,
omawiane są na szkoleniu ob2
Po pierwsze, wysiłek przeznaczony na stworzenie makra zwraca się gdy makropolecenie jest wykorzystywane wielokrotnie. Uwaga ta dotyczy, ogólnie rzecz biorąc, pracy
z językiem poleceń, a poprzez to obejmuje również sensowność parametryzowania
analizy przy pomocy makrodefinicji. Zatem, zanim rozpocznie się tworzenie makr warto
zadać sobie pytanie o powtarzalność danego działania. Łatwiej wtedy zdecydować nie
tylko o tym, czy budować makro, ale również, w jaki sposób najlepiej jest je stworzyć. Jak
pisał Seneka: „Gdy nie wiesz, do którego portu płyniesz, żaden wiatr nie jest pomyślny”
(Epistulae Morales, viii, 71, 3).
spss polsk a
Po drugie, tworzenie makrodefinicji jest związane z głębszą wiedzą na temat Syntaxu
i poleceń. A na to nakłada się jeszcze wiedza o opcjach makra i sposobie ich wykorzystania. Stąd też pomysł na przybliżenie Czytelnikom tego zagadnienia w ramach ekspress- u.
A zatem, w kolejnych odcinkach z tej serii zajmiemy się następującymi zagadnieniami:
1. Różne możliwości wyprowadzania parametrów w makrach
2. Przykłady parametryzacji tabel i wykresów
3. Pętle w makro poleceniach
4. Przykłady tworzenia tabel ze zmieniającą się listą zmiennych
5. Typowe komunikaty o błędach.
ul. Racławicka 58
30–017 Kraków
tel./faks 012.636.96.80
e–mail: info @ spss.pl
www.spss.pl
www.analizadanych.pl
www.webmining.pl