wprowadzenie_do_sas_cz2.pdf

(281 KB) Pobierz
Wprowadzenie do SAS_cz2
Wprowadzenie do SAS
Jak zacząć?
Część II: Elementy języka SAS 4GL
Rafał Latkowski
2
EnhancedEditor(1)
Uruchamianie programu
•Zaznaczyć blok (lub bez zaznaczania, gdy
chcemy wykonać całą zawartość pliku).
•Wcisnąć F3 lub
3
4
Definiowanie bibliotek
•Engine„V8”:
libnamekurs „c:\kurs”;
•Różnice pomiędzy interfejsem:
–Podłączanie przy starcie można uzyskać
wpisując do „autoexec.sas”
•Engine„V8”(domyślny) jest w pełni
zgodny z V7-V9 oraz czyta automatycznie
zbiory V6
•Zbiory SAS mogą być skompresowane
optionscompress=yes;
Ćwiczenie 3
•Skasować bibliotekę kurs
•Założyć bibliotekę kurs bez pomocy
interfejsu
•Założyć bibliotekę dane wskazującą na ten
sam katalog.
5
6
1
400764208.036.png 400764208.037.png 400764208.038.png 400764208.039.png 400764208.001.png 400764208.002.png 400764208.003.png 400764208.004.png 400764208.005.png
Struktura programu w 4GL
Wprowadzenie do SAS 4GL
•Program w 4GL składa się z:
–Proc Step’ów
–Data Step’ów
•Data Step’ytworzą nowy zbiór danych
(niekoniecznie)
•Proc Step’ywykonują procedurę SAS
(praktycznie nierozszerzalnyzbiór procedur)
•Nie można zagnieżdżać proc stepów i data
stepów w sobie (w dowolnej kombinacji)
7
8
Cechy 4GL
Data Step
•SQL jest podzbiorem języka 4GL (proc sql; tam
można zagnieżdżać wyrażenia SQL’owe)
•SAS 4GL jest skomplikowany
–Posiada duże bogactwo opcji stosowalnych w wielu
miejscach
–Posiada ogromną liczbę procedur o rozbudowanej
funkcjonalności
•SAS 4GL jest prosty
–Jeżeli nie wiesz, jak coś zostało zaimplementowane, to
zostało to zaimplementowane w najprostszy sposób
(tj. tak aby uzyskać maksymalną efektywność).
data <nazwa zbioru>;
•<zawartość data step’a>
run;
9
10
Data Step pusty
Data Step kopiujący
data a;
run;
data a;
set kurs.noty;
run;
•Tworzy pusty zbiór (1 obserwacja, 0
zmiennych);
•Domyślnie zbiór utworzony zostanie w
bibliotece work(data a; === data work.a;)
•Kopiuje zbiór określony w poleceniu set do
zbioru określonego w nagłówku data
step’a;
11
12
2
400764208.006.png 400764208.007.png 400764208.008.png 400764208.009.png 400764208.010.png 400764208.011.png 400764208.012.png
Ćwiczenie 4
Sprawdzenie nazw kolumn (1)
•Skopiować zbiór kurs.notydo biblioteki
dane pod dowolną nazwą (np. dane.kopia)
•Porównać, czy zbiór jest widoczny również
w bibliotece kurs (ew. użyć opcji
„View/Refresh”)
•Nazwy kolumn można sprawdzić w oknie
propertieszbioru danych (prawy przycisk
myszy na zbiorze).
•Nazwy kolumn można sprawdzić w
VIEWTABLE, ale uwaga: należy odróżnić
nazwy od label’i.
13
14
Sprawdzenie nazw kolumn (2)
Proc Step –opis zbioru (1)
proc contentsdata=kurs.noty;
run;
•Wypisuje informacje o zbiorze w oknie
„Out”(czyli jest to tzw. raport).
15
16
Proc Contents(2)
Proc Step -sortowanie
proc contents data=kurs.noty
short;
run;
proc sort data=kurs.iris
out=kurs.iris_sorted;
by sepallensepalwid;
run;
•Opcja shortpowoduje, że wypisywane są
tylko nazwy zmiennych.
•Sortuje zbiór w.g. podanych zmiennych.
•Można również bez „out=…”, wtedy nadpisuje
zbiór „data=…”.
•Uwaga: Zbiór otwarty (np. w VIEWTABLE) nie
może być nadpisany (to dotyczy również data
step’ów).
17
18
3
400764208.013.png 400764208.014.png 400764208.015.png 400764208.016.png 400764208.017.png 400764208.018.png 400764208.019.png
PROC SORT Syntax(doc)
Opcje procedury SORT (doc)
Syntax
PROC SORT < option(s) > < collating-
sequence-option >;
BY <DESCENDING> variable-1
<...<DESCENDING> variable-n >;
Specify the output order
Reverse the order for character
variables
REVERSE
Maintain the order within BY groups
EQUALS
Allow for variation within BY groups
NOEQUALS
Eliminate duplicate observations
•Dokumentacja:
–F1
–http://v8doc.sas.com/sashtml/
Delete observations with common BY
values
NODUPKEY
Delete observations that have
duplicate values
NODUPRECS
19
20
Ćwiczenie 5
Proc SQL
•Posortować zbiór Kurs.Noty(np. do
Kurs.Noty2), tak aby ostatnie
(„najmłodsze”) notowania znalazły się na
początku zbioru.
•Posortować zbiór Kurs.Notyjak powyżej;
W zbiorze wynikowym (np. Kurs.Noty3)
powinna się znaleźć tylko jedna
obserwacja (notowanie) z każdego dnia.
proc sql;
create table kurs.noty3s
as
select *
from kurs.noty
where nazwa='TONSIL'
order by data desc;
quit;
21
22
Wczytanie zbioru wewnętrznego
Proste techniki wczytywania
data klasa;
input imie$ nazwisko$ wiek;
cards;
Jan Kowalski 8
OlaWokalska9
Wit Lokawski8
;
run;
23
24
4
400764208.020.png 400764208.021.png 400764208.022.png 400764208.023.png 400764208.024.png 400764208.025.png 400764208.026.png
Wczytywanie –problemy (1)
Wczytywanie –problemy (2)
data klasa;
input imie$ nazwisko$ wiek;
cards;
Jan Kowalski 8
OlaWokalska9
Wit Lokawski8
AleksanderMucha10
;
run;
25
26
Wczytywanie –problemy (3)
Wczytywanie –rozwiązanie
data klasa;
length imie$10;
input imie$ nazwisko$ wiek;
cards;
Jan Kowalski 8
OlaWokalska9
Wit Lokawski8
AleksanderMucha10
;
run;
27
28
Length
Wczytywanie zbioru z pliku
•Analogicznie można napisać:
lengthwiek 8;
lengthwiek 4;
lengthnazwisko $20;
data kan;
infile'c:\kurs\txt\kan.txt';
input plecwiekzawodmiejsce_zam
rozpoznanieuzaleznienie_lat
ilosc_wyp_papierosow
poprzednie_probychoroby_ukl_kraz
choroby_ukl_kraz_ob
choroby_ukl_oddechchoroby_wrzody
choroby_psychicznechoroby_nerwice
ilosc_zab_elektroczas_trw_obserw
efekty_leczeniadzialania_uboczne;
run;
29
30
5
400764208.027.png 400764208.028.png 400764208.029.png 400764208.030.png 400764208.031.png 400764208.032.png 400764208.033.png 400764208.034.png 400764208.035.png
Zgłoś jeśli naruszono regulamin