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