Podstawowe i zaawansowane programowanie oraz statystyka w SAS

Nr przedmiotu: 223110-1234

Prowadzący: dr Karol Przanowski dr Sebastian Zając
Zakład Analizy Historii Zdarzeń i Analiz Wielopoziomowych

Gdzie jesteśmy ?

Co już wiemy ?

  • Teoria Big Data jest dla Ciebie oczywista
  • Znasz środowiska SAS w których możesz wpisywać kod
  • Masz podstawowe informacje o SAS (format danych, kody, ustawienia edytorów)
  • Rozumiesz, że w SAS posługujesz się kodem 4GL
  • Potrafisz napisać podstawowy Data Step w SAS

Zadanie

Utwórz katalog na swoim dysku i podepnij go jako bibliotekę SAS o nazwie dane

Stwórz nowy zbiór w nowej bibliotece ze zmienną x = 3 oraz y = 'abc'

Krótko o PROC Stepie

  • Blok PROC STEP jest elementem programów w SAS 4GL składającym się z pojedynczej, predefiniowanej procedury SAS
  • Większość PROC STEP-ów czyta dane z pojedynczego zbioru danych wejściowych i zapisuje informacje do zbiorów wyjściowych lub tworzy szereg raportów prezentujących uzyskane wyniki.
  • Każda procedura posiada zestaw instrukcji i opcji.
proc sql;
create table work.test as
select * from dane.zbior_m;
quit;
proc print data=work.test ;
run;

Parametr SET w DATA STEPIE

data copy;
set sashelp.class;
run;

Data Step jest blokiem odpowiedzialnym za przetwarzanie sekwencyjne

Instrukcja SET występuje tylko w DATA Stepie

Domyślnie instrukcja SET czyta wszystkie obserwacje ze zbioru począwszy od pierwszej.

W przypadku gdy chcesz iterować po plikua nie po tabeli SET trzeba zamienić na INFILE.

W ramach DATA STEP-u tworzona jest automatycznie pętla główna (ang. implicit loop), w obrębie której: czytana jest kolejna obserwacja z wejściowego zbioru danych (lub wiersz z wejściowego pliku płaskiego), wykonywane są instrukcje będące treścią danego kroku, finalna postać obserwacji zapisywana jest do zbioru wynikowego. Domyślnie pętla główna wykonywana jest dla każdej obserwacji w zbiorze wejściowym. W przypadku, gdy w DATA STEPIE nie ma żadnej instrukcji czytającej ze zbiorów, pętla główna wykonuje się tylko jeden raz.

Chcemy każdą wartość występującej zmiennej X zwiększyć o 100.

data zbior;
DO i=1 to 10;
x=floor(100*ranuni(0));
output;
end;
run;
data b;
set zbior;
x=x+100;
run;

Nie jest nam potrzebna żadna dodatkowa pętla !

Wektor PDV (Program Data Vector)

PDV jest strukturą tworzoną w pamieci w trakcie kompilacji DATA STEPu. Jest to wektor (jednowymiarowa tablica) zawierająca zmienne istniejące w DATA STEPIE, tzn. zmienne, które istnieją w zbiorze (zbiorach) wejściowym, jak i wszelkie pozostałe zmienne zadeklarowane w kodzie. Przed rozpoczęciem działania DATA STEPU wszystkie zmienne są inicjalizowane na brak danych, następnie podczas wykonywania instrukcji poszczególne wartości nadpisują zawartości wektora. Domyślnie wartości zmiennych, które nie pochodzą ze zbiorów wejściowych, na początku każdej iteracji DATA STEPU są inicjalizowane na braki danych. Jeżeli nie zadecydowano inaczej to po zakończeniu każdego obrotu pętli głównej cała zawartość PDV jest zapisywana do zbioru wynikowego tworząc w nim kolejną obserwację. Zmienne pojawiają się w wektorze PDV w kolejności ich wystąpienia w DATA STEPIE i dokładnie w tej kolejności trafiają do zbioru wynikowego. Wektor PDV zawiera dodatkowo zmienne automatyczne, które nie są zapisywane do zbioru wyjściowego ale mogą być wykorzystane podczas przetwarzania, np.:

data _null_;
a = 1;
put 'a= ' a;
put a;
run;
data _null_;
a = 3;
put 'wektor PDV = ' _all_;
run;

Tworzenie zmiennych

Zmienne tworzymy przez przypisanie bądź użycie instrukcji length

data dane.zmienne;
length txt1 txt2 $12;
length n1 n2 n3 8;
txt3= "Sebastian Zając";
n4 = 123;
run;

Istnieje jeszcze retain

data dane.ret_test;
retain a 0;
length b $5;
b='to jest bardzo dlugi napis';
a = a+1;
put a;
put _all_;
run;

Przykład !

data _null_;
length wiersz 8;
set sashelp.class;
wiersz = wiersz +1;
put wiersz;
run;

A teraz inaczej

data _null_;
length wiersz 8;
set sashelp.class;
retain wiersz 0;
wiersz = wiersz +1;
put wiersz;
run;

Jako opcje zbioru

data dane.boys(where=(sex='M')) dane.girls(where=(sex='F'));
set sashelp.class(where=(age=14));
run;

Jako instrukcja

data dane.girls_14;
set sashelp.class;
where age=14 and sex="F";
run;

Zadanie

Skopiuj zbiór sashepl.cars do biblioteki work zmieniając jego nazwę na samochody

Za pomocą data stepu oraz proc sql stwórz tabelę dla samochodów z Europy o pojemności silnika pomiędzy 2 i 4 litry.

Wybierz kolumny:

Nazwy kolumn zmień na ich polskie odpowiedniki.

Format daty i czasu

data, czas, dataczas

data a;
x=date();
y=today();
t=time();
dt=datetime();
format x y date9.
t time9.
dt datetime18. ;
run;

dataczas na datę i czas

data a;
dt=datetime();
dp=datepart(dt);
tp=timepart(dt);
format dt datetime18.
dp date9.
tp time9. ;
run;

elementy daty

data a;
d=today();
year = year(d);
quarter = qtr(d);
month = month(d);
day = day(d);
week = week(d);
weekday = weekday(d);
format d date9.;
run;

Funkcje liczbowe dla dat

data a;
d = mdy(10,10,2019);
dt = dhms(d,19,20,34);
t =hms(13,42,13);
format d date9. t time9. dt datetime18. ;
run;

Czas - składniki

data a;
t = time();
h = hour(t);
m = minute(t);
s = second(t);
format t time9.;
run;

funkcje do obliczania okresów

data a;
dzis = today();
d = intnx('month', dzis, -5, "B");
count = intck('month', d, dzis);
format d time9.;
run;

Zadanie

Za pomocą fukcji oraz własnych obliczeń oblicz swój wiek w latach, miesiącach i dniach.