Kolejność komend

Kolejność komend jest często nietypowa i zgodna z tą sekwencją logiczną: definicja zmiennej, transformacja danych i analiza statystyczna. Na przykład: nie można oznaczyć, transformować, analizować ani używać zmiennej w żaden sposób przed jej istnieniem. Zastosowanie mają następujące zasady ogólne:

  • Komendy definiujące zmienne dla sesji (DATA LIST, GET, GET DATA, MATRIX DATA, itp.) muszą poprzedzać komendy, które przypisują etykiety lub braki danych do tych zmiennych; muszą one również poprzedzać komendy transformacji i procedury, które wykorzystują te zmienne.
  • Komendy transformacji (IF, COUNT, COMPUTE, itp.) które są używane do tworzenia i modyfikowania zmiennych, muszą poprzedzać komendy, które przypisują etykiety lub brakujące wartości do tych zmiennych, a także muszą poprzedzać procedury, które wykorzystują te zmienne.
  • Ogólnie, wynik logiczny przetwarzania komend określa kolejność komend. Na przykład procedura, która tworzy nowe zmienne w aktywnym zbiorze danych, musi poprzedzać procedurę, która używa tych nowych zmiennych.

Poza przestrzeganiem powyższych reguł, często ważne jest rozróżnianie komend, które powodują odczytywanie danych, a tymi, które nie są wykonywane, oraz między tymi, które są przechowywane w toku, za pomocą następnej komendy, która odczytuje dane, a tymi, które są aktywne natychmiast, bez konieczności odczytywania danych.

  • Komendy, które powodują odczytywanie danych, a także wykonywanie oczekujących transformacji, obejmują wszystkie procedury statystyczne (np. CROSSTABS, FREQUENCIES, REGRESSION); niektóre komendy, które zapisują/zapisują treść aktywnego zbioru danych (np. DATASET COPY, SAVE TRANSLATE, SAVE); AGGREGATE; AUTORECODE; EXECUTE; RANK; i SORT CASES.
  • Komendy, które są przechowywane, oczekujące na wykonanie za pomocą następnej komendy, która odczytuje dane, zawierają komendy transformacji, które modyfikują lub tworzą nowe wartości danych (np. COMPUTE, RECODE), komendy definiujące działania warunkowe (np. DO IF, IF, SELECT IF), PRINT, WRITEi XSAVE. Obszerna lista tych komend znajduje się w sekcji Komendy Stored, Pending Execution (Komendy składowane, oczekujące na wykonanie).
  • Komendy, które są wykonywane natychmiast bez odczytywania danych lub wykonywania oczekujących komend, obejmują transformacje, które zmieniają informacje słownikowe bez wpływu na wartości danych (np. MISSING VALUES, VALUE LABELS) i komendy, które nie wymagają aktywnego zbioru danych (np. DISPLAY, HOST, INSERT, OMS, SET). Oprócz natychmiastowej realizacji tych komend, te komendy są również przetwarzane bezwarunkowo. Na przykład w przypadku włączenia do struktury produktu DO IF komendy te są uruchamiane niezależnie od tego, czy warunek jest spełniony. Obszerna lista tych komend znajduje się w sekcji Komendy, które natychmiast odniosą skutek .

Przykład

DO IF expense = 0.
- COMPUTE profit=-99.
- MISSING VALUES expense (0).
ELSE.
- COMPUTE profit=income-expense.
END IF.
LIST VARIABLES=expense profit.
  • COMPUTE poprzedza MISSING VALUES i jest przetwarzany jako pierwszy, jednak wykonywanie jest opóźniane do czasu odczytania danych.
  • MISSING VALUES zaczyna działać od razu po napotkaniu, nawet jeśli warunek nie jest spełniony (tzn., nawet jeśli nie ma żadnych obserwacji, gdzie expense=0).
  • LIST powoduje, że dane są odczytywanie; w związku z tym zarówno COMPUTE , jak i LIST są wykonywane podczas tego samego przekazywania danych.
  • Ponieważ produkt MISSING VALUES jest już w mocy przez ten czas, pierwszy warunek w strukturze DO IF nigdy nie zostanie spełniony, ponieważ wydatek o wartości 0 jest uważany za brak, a więc warunek jest wartościowany do braku, gdy wydatek wynosi 0.