SQL w SAS – ograniczanie listy obserwacji

Jednym ze sposobów uruchomienia kodu SQL w SAS jest wykonanie PROC SQL. Np.

proc sql;
SELECT *
FROM SASHELP.CLASS
;
quit;

W celu ograniczenia liczby przetwarzanych lub wyświetlanych rekordów możemy zastosować opcje PROC SQL. I tak:

  • INOBS mówi ile obserwacji z każdego zbioru wymienionego w SQL należy wziąć do przetwarzania (odpowiednik TOP/LIMIT użytego w podzapytaniu)
  • OUTOBS mówi ile obserwacji pokazać na koniec przetwarzania (odpowiednik TOP/LIMIT w głównym zapytaniu)

Tak pobierzemy trzy wiersze ze zbioru wynikowego:

proc sql outobs=3;
SELECT *
FROM SASHELP.CLASS
;
quit;

Wszystko fajnie, tylko co jeśli nie chcemy albo nie możemy używać opcji PROC SQL (bo np. piszemy własne oprogramowanie wykorzystując SAS Integration Technologies)? Wówczas mamy dwie możliwości, w zależności od skomplikowania zapytania.

W najprostszym przypadku, jeśli potrzebujemy odpowiednik „SELECT TOP 100 * FROM tabela” wystarczy dodać klauzulę OBS=100 po FROM – zadziała to tak samo jak INOBS. Uwaga – jeśli stosujemy aliasy tabel, to klauzulę należy dodać przed nimi, np.

SELECT * FROM SASHELP.CLASS (OBS=100) sc

Jeśli potrzebujemy ograniczyć listę wynikową, to można ponumerować wiersze za pomocą nieudokumentowanej funkcji MONOTONIC() (której na dodatek SAS nie wspiera)

SELECT * FROM SASHELP.CLASS sc WHERE MONOTONIC() <= 3

Jeśli łączymy się do zbiorów w zewnętrznych bazach danych możemy też zastosować mechanizm SQL Pass-through. Dzięki niemu możemy wykorzystać dialekt SQL wykorzystywany w danym środowisku, a dodatkowo zrzucimy przetwarzanie na bazę danych, a nie na SAS. Więcej o SQL Passthrough np. tutaj lub tutaj.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s