Wprowadzenie do programowania w SAS-ie oraz estymacji rozkladów 1 oraz estymacji rozkladów [email protected]Plan ♦ Co to jest SAS System – Moduly – Środowisko – Organizacja danych przetwarzanych w SAS 2 ♦ Programowanie w języku SAS 4GL ♦ Estymacja parametryczna rozkladów zmiennych losowych
19
Embed
Wprowadzenie do programowania w SAS-ie oraz …Wprowadzenie do programowania w SAS-ie oraz estymacji rozkładów 1 [email protected] Plan Co to jest SAS System – Moduły
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Wprowadzenie do programowania w SAS-ieoraz estymacji rozkładów
♦ Historycznie SAS = Statistical Analysis System♦ Obecnie (a) platforma do budowania systemów wspomagania
decyzji (DSS) (zbiór modułówdo analizy danych), (b) zbiór specjalizowanych aplikacji DSS
♦ Przykładowe moduły
3
• Base SAS język do przetwarzania danych, procedury analityczne) • STAT procedury analizy statystycznej• ACCESS dostęp do danych w różnych formatach (DBMS)• GRAPH• AF, webAF środowiska budowania aplikacji OLAP• EIS• ...• OR, QC, ETS,... specjalizowane procedury (badania operacyjne,
niezawodność i kontrola jakości, szeregi czasowe, etc.• Enterprise Miner aplikacja data mining • Data Warehouse Administrator
Środowisko programu SAS
♦ MVA (MultiVendor Architecture): programy SAS wykonują się na VMS, CMS, OS/390, Unix, Windows, OS/2 bez modyfikacji
♦ Dane przetwarzane przez programy SAS:
– Pliki SAS (SAS files)
4
– Pliki SAS (SAS files)Np. SAS data sets, views, MDDBs
– Które przechowywane są w bibliotekach SAS (SAS libraries)Referencja (LIBREF) do folderu, kartoteki itp. systemu operacyjnego, np.
LIBNAME projekt ‘c:\dane\projekt’;
Biblioteki (SAS Libraries)
♦ Biblioteki tworzone automatycznie przez SAS
SASHELP -- SAS system filesSASUSER -- user profile filesWORK -- Biblioteka tymczasowa (pozostałe s ą
permanentne)
5
permanentne)
♦ Odwołania do plików SAS –kwalifikowane nazwy libraryname.filename, e.g.,
projekt.dane -- plik w bibliotece projekt
dane -- plik w bibliotece WORK
Pliki danych SAS (SAS Data Sets)
♦ SAS data sets, dwa typy:– DATA – tablica fizycznie przechowująca dane
– VIEW – kod (query), który tworzy logiczny data set
♦ Konwencje nazw
6
♦ Konwencje nazw– Wiersze nazywają się obserwacjami
– Kolumny nazywają się zmiennymi (variables)
♦ SAS data set składa się z: – Deskryptora - zawiera atrybuty data set-u i jego zmiennych
– Części zawierającej dane
Pliki danych SAS (SAS Data Sets)♦ Wyświetlanie deskryptora SAS data set-u
PROC CONTENTS DATA=projekt.test;
RUN;-----Alphabetic List of Variables and Attributes-----
♦ Atrybuty zmiennych– Length - długość zmiennej: numeric: 3-8, character 1-32767 (MS Windows)– Format - jak wyświetlać (drukować) wartości zmiennej– Informat - jak konwertować (skanować) „input string” do wartości zmiennej– Label - opis zmiennej
Pliki danych SAS (SAS Data Sets)♦ Wyświetlanie wartości w data set
PROC PRINT DATA= projekt.test;
RUN;
Obs sex teacher_Code titel_code teach_duration
8
1 M 1 006 1
2 M 2 502 1
3 M 3 .
4 M 4 1
5 M 5 022 1
6 M 6 006 1
7 W 7 1
8 M 8 006 1
♦ „Missing value” – brak danych– Wskazuje że w danej obserwacji nie przechowujemy wartoći dla danej zmiennej– „missing numeric value” reprezentowana przez . (kropka)– „missing character value” reprezentowana przez spację
♦ Główna pętla DATA step:– data step wczytuje jedną obserwację,
– Dane są umieszczane w PDV = Program Data Vector;– PDV jest inicjowany na wartości missingna początku każdej iteracji data step
– Wykonuje instrukcje (statements) zapisane w DATA step (na danej obserwacji),
13
obserwacji),– Zapisuje obserwację do wynikowego data set (implicit OUTPUT)
♦ Uwaga: Implicit OUTPUTnie działa jeśli jawnie użyjemy OUTPUT statement w DATA step
♦ Dane wejściowe dla DATA step wskazujemy np. instrukcją:– SET statement – czytaj dane we z data set – INPUT statement – wczytaj linię z pliku zewnętrznego (np. wskazanego
przez instrukcję INFILE)
Wybrane „idiomy” programisty
♦ Wybieramy obserwacje
♦ Wybieramy zmienne
♦ Tworzenie i modyfikowanie zmiennych
♦
14
♦ Instrukcja OUTPUT
♦ Łączenie data set-ów (stacking, merging)
♦ BY-group processing
♦ Czytanie, pisanie plików zewnętrznych
Wybieramy obserwacjedata male;
set students;
if sex=‘F’ then delete;
run;
data male;
set students;
Zapisz wybrane obserwacje
Używając subsetting IF:
→ usuń obserwację jeśli wyrażenie true;
→ zapisz obserwację jeśli wyrażenie true;
15
set students;
if sex=‘M’;
run;
or:
data male;
set students;
where sex=‘M’;
run;
data male;
set students (where=(sex=‘M’));
run;
→ zapisz obserwację jeśli wyrażenie true;
Używając WHERE (instrujację lub „data set option”)
→ instrukcja WHERE
→ WHERE „data set option”
Wybieramy obserwacjedata male;
set students;
if sex=‘F’ then delete;
run;
data male;
set students;
Obs name sex note1 note2 avg
1 Anna F 4 5 4.5
2 Ian M 3 . 3.0
3 Eva F 2 1 1.5
16
set students;
if sex=‘M’;
run;
or:
data male;
set students;
where sex=‘M’;
run;
data male;
set students (where=(sex=‘M’));
run;
Obs name sex note1 note2 avg
1 Ian M 3 . 3
Wybieramy zmiennedata avg_only;
set students;
drop sex note1 note2;
run;
data avg_only;
set students;
Zapisz tylko wybrane zmienne
Używając instrukcjiDROP, KEEP
17
set students;
keep name avg;
run;
or:
data avg_only;
set students (drop= sex note1 note2);
run;
data avg_only;
set students (keep= name avg);
run;
Używając „data set options” DROP, KEEP
Wybieramy zmiennedata avg_only;
set students;
drop sex note1 note2;
run;
data avg_only;
set students;
Obs name sex note1 note2 avg
1 Anna F 4 5 4.5
2 Ian M 3 . 3.0
3 Eva F 2 1 1.5
18
set students;
keep name avg;
run;
or:
data avg_only;
set students (drop= sex note1 note2);
run;
data avg_only;
set students (keep= name avg);
run;
Obs name avg
1 Anna 4.5
2 Ian 3.0
3 Eva 1.5
Tworzymy nowe zmiennedata pass (drop= sex note1 note2
avg);
set students;
if avg < 2 then result='passed';
else result='failed';
run ;
Obs name sex note1 note2 avg
1 Anna F 4 5 4.5
2 Ian M 3 . 3.0
3 Eva F 2 1 1.5
19
run ;
Obs name result
1 Anna failed
2 Ian failed
3 Eva passed
Tworzymy nowe zmienne
ŻLE:
data pass;
set students (drop= sex note1 note2 avg);
if avg < 2 then
Uwaga: W przykładzie zmienne sex, note1,2 i avg nie są czytane w wejściowego data set, stąd wartość avg jest niezainicjowana w DATA step (czyli jest missing)
Obs name sex note1 note2 avg
20
if avg < 2 then result='passed';
else result='failed';
run ;
Obs name sex note1 note2 avg
1 Anna F 4 5 4.5
2 Ian M 3 . 3.0
3 Eva F 2 1 1.5
Obs name avg result
1 Anna . passed
2 Ian . passed
3 Eva . passed
Instrukcja OUTPUTdata males females;
set students;
if sex='F' then output females ;
if sex='M' then output males ;
drop sex;
run ;
Zapisuje aktualną obserwację do wyjściowego data set
Uwaga: jeśli OUTPUT jest użyty jawnie w DATA step, „implicit OUTPUT”nie działa w data stepie (patrz algorytm DATA step)
Zmienne automatycznePrzykład – sprawdzamy czy nie ma błędnych
danych wejściowych:
data results err_log;
infile ‘C:\temp\results.txt’;
input name $ jump date yymmdd8.;
if _error_ then output err_log ;
Tworzone przez DATA step; nie są częścią Program Data Vectora; nie są zapisywane do wynikowego data set, np.
_N_ - nr iteracje DATA stepu
_ERROR_ - ustawiane na 1 jeśli jest błąd
26
if _error_ then output err_log ;
else output results;
run ;
_ERROR_ - ustawiane na 1 jeśli jest błąd przetwarzania danych (błędne dane we, błąd w operacji matematycznej)
FIRST.by_variable
LAST. by_variable – patrz BY-group processing
Czytanie plików zewnętrznychdata results err_log;
infile ‘C:\temp\results.txt’;
input name $ 1-10 jump @24 date yymmdd8.;
if _error_ then output err_log;
else output results;
run ;
Instrukcja INFILE – wskazuje plik do czytania (może być fizyczna ścieżka lub FILEREF przypisane przez FILENAME fileref ‘path’;
INPUT
27
run ; INPUT– Wczytaj (przynajmniej jedn ą) lini ę
z pliku– Konwertuj lini ę do wartości
zmiennych wg:• Specyfikacji zmiennych, np.
– name $ - character variable– jump, date – numeric variables
• Specyfikacji kolumn, np. – name $ 1-10 – zakres kolumn
• Informaów, np. – date yymmdd. – informat daty
Czytanie plików zewnętrznychdata xy;
input x y;
datalines;
1 2 3
4
5 6 7 8
;
Modyfikacja funkcjonalno ści INPUT:
INPUT var1 var2 var3 @@;
INPUT nie czyta nowej linii jak długo w buforze linii są jeszcze dane nie skonwertowane do zmiennych
Obs x y1 1 2 2 4 5
28
;
run ;
data xy_ok;
input x y @@;
datalines;
1 2 3
4
5 6 7 8
;
run ;
skonwertowane do zmiennych
Obs x y1 1 2 2 3 43 5 64 7 8
Zapis plików zewnętrznychdata _null_; *no data set;
set exam;
file 'c:\temp\exam.txt';
put student_code 1- 4 ', ' sem @24 note 3.1 ;
run;
Instrukcja FILE – wska ż plik do którego nastąpi zapis
Instrukcja PUT – zapisz jedną lini ę do pliku wy, używając FORMAT-ówzmiennych lub FORMAT-ów podanych w instrukcji PUT
29
podanych w instrukcji PUT
data _null_ – nie twórz wyjściowego data set-u
Instrukcja RETAINdata wzrosty_miesieczne;
set gielda; *data kurs mies;
BY mies;
RETAIN pocz;
IF FIRST.mies then pocz =kurs;
IF LAST.mies then DO;
Składnia polecenia RETAIN:
RETAIN var initial_val;
Zmienna var nie będzie inicjowana na ‘missing’ na początku kolejnych iteracji DATA step (warto ść będzie zachowana z poprzedniej iteracji)
30
IF LAST.mies then DO;
Wzrost=kurs-pocz;Output;
end;
run;
zachowana z poprzedniej iteracji)
Również:
var+expression;
Co jest równoważne:
RETAIN var 0;var=SUM(var,expression);
Estymacja parametryczna rozkładówzmiennych losowych♦ Estymacja na podstawie prób pełnych za pomocą
procedur:– PROC CAPABILITY (z modułu SAS/QC)
– PROC UNIVARIATE (z modułu Base SAS)
31
♦ Estymacja na podstawie prób obciętych– PROC RELIABILITY (z modułu SAS/QC)
PROC CAPABILITYproc capability data=test;
var t;
histogram t /
weibull ;
run ;
Wykonaj analizę parametryczną rozkładu zmiennej t (zmienna numeryczna w zbiorze test)
Polecenie histogram z opcją weibull realizuje dopasowanie rozkładu Weibulla do danych
32
Weibulla do danychW wyniku dostajemy estymowane
parametry rozkładu (patrz np. wykres histogramu z nałożoną funkcj ą gęstości) oraz wyniki testów zgodności rozkładów
Możemy również użyć polecenia cdfplot oraz probplot
PROC CAPABILITY – histogram i estymowana funkcja gęstości
33
PROC CAPABILITY – test zgodności rozkładów
♦ Jeśli p Value jest mniejsze niż założony poziom istotności testu (np. 0.05), wówczas odrzucamy hipotezę zerową o zgodności rozkładów (czyli badana zmienna t nie ma rozkładu Weibulla)
Percent Outside Specifications for Weibull Distribution
Lower Limit Upper LimitLSL 0.800000 USL 1.30000
36
LSL 0.800000 USL 1.30000
Obs Pct < LSL 6.572770Obs Pct > USL 2.816901
Est Pct < LSL 8.967087Est Pct > USL 1.405525
PROC RELIABILITYproc reliability data=test;
distribution Weibull;
pplot t*censor( 1 ) /
covb
cfit = yellow
cframe = ligr
ccensor = red;
Wykonaj analizę parametryczną rozkładu zmiennej t, przy czym obserwacje w zbiorze test, w których zmienna censor przyjmuje wartość 1 należy traktować jako próby obcięte
Polecenie distribution realizuje
37
ccensor = red;
inset / cfill = ywh;
run ;
Polecenie distribution realizuje dopasowanie wskazanego rozkładu do danych
W wyniku dostajemy parametry rozkładu estymowane na podst. próby obciętej oraz wykres pplot, na podstawie którego oceniamy zgodność rozkładów (jeśli próba pochodzi z rozkładu Weibulla, dane powinny układać się wzdłuż prostej).