View
2
Download
0
Category
Preview:
Citation preview
Wprowadzenie do programowania w SAS-ieoraz estymacji rozkładów
1
oraz estymacji rozkładów
Henryk.Maciejewski@pwr.wroc.pl
Plan
♦ Co to jest SAS System– Moduły– Środowisko– Organizacja danych przetwarzanych w SAS
2
– Organizacja danych przetwarzanych w SAS
♦ Programowanie w języku SAS 4GL
♦ Estymacja parametryczna rozkładów zmiennych losowych
Co to jest SAS System
♦ 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-----
# Variable Type Len Pos Format Informat Label
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
7
ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ
1 sex Char 2 16 $3. $3. sex
4 teach_duration Num 8 8 11. 11. teach_duration
2 teacher_Code Num 8 0 11. 11. teacher_Code
3 titel_code Char 12 18 $12. $12. titel_code
♦ Typy zmiennych w SAS– character – numeric
♦ 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ę
Programowanie w SAS– PierwszyProgram
DATA STEP
tworzy data set test
Tworzy zmienne w test
Wykonuje data step
data test;
teachers= 283 ;
students= 853 ;
all=teachers+students;
s_per_t=students/teachers;
run ;
9
Wykonuje data step
PROC STEP
Wyświetla data set test
run ;
proc print data=test;
run;
Data Set WORK.FHS
Obs teachers students all s_per_t
1 283 853 1136 3.01413
Przetwarzanie danych w programach SAS
Raport
Plik zewnętrzny
SAS Data Set
Raw data file
...
DATA Step
PROC Step
10
Program w SAS SAS Log
SAS Data SetDBMS tables(e.g., .mdb)
Remote access(ftp, TCP/IP socket, etc.)
PROC Step
...
DATA Step
...
Części programu: DATA Step, PROC Step♦ DATA Step
– Wczytuje dane wejściowe• Np. data set,
• Pliki zewnętrzne itd.
– Przetwarza dane
♦ PROC Step– Analiza danych,
– Tworzenie raportów (tekst, graf, HTML, PDF, itd.)
11
– Przetwarza dane
– Tworzy wyjście• Np. data sets,
• Plik zewnętrze
• Raporty
Algorytm DATA Step
data students;
input name $ sex $ note1 note2;
avg=mean(note1,note2);
datalines;
Anna F 4 5
12
Ian M 3 .
Eva F 1 4
;
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
Algorytm DATA Step-u
♦ 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)
21
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
females males
1 Anna 1 Ian
2 Eva
Instrukcja OUTPUT– generacja danychdata generator;
do x= 1 to 100 ;
y=rannor(- 1);
output;
end;
run ;
Uwaga: nie ma instrukcji podającej źródło danych we (np. SET lub INPUT), stąd wykona się jedna iteracja gł. pętli DATA step
Wynik: 100 liczb losowych z rozkładu normalnego N(0,1)
22
normalnego N(0,1)
Obs x y
1 1 0.52813
2 2 0.51177
...
...
99 99 -0.23971
100 100 0.92665
Łączenie Data Set-ów(instrukcja SET)data all;
set males females;
run ;
data all2;
set males(in=m) females(in=f);
Przetwarzaj obserwacje z pierwszego data set, potem z drugiego itd.
Rozróżnianie z którego zbioru pochodzi dana obserwacja:– males(in=m) tworzy zmienną
automatycznąm(m=1 dla obserwacji ze zbioru males ; m=0 w przeciwnym przypadku)
23
set males(in=m) females(in=f);
if m then sex=‘M’;
if f then sex=‘F’;
run ;
przypadku) – Uwaga: zmienne automatyczne (m and
f) nie są zapisywane do wyjściowego data set
Obs name note1 note2 avg sex
1 Ian 3 . 3.0 M
2 Anna 4 5 4.5 F
3 Eva 2 1 1.5 F
Łączenie Data Set-ów(instrukcja MERGE)data lib;
input name $ @ 8 date yymmdd10. title $20. ;
datalines;
Anna 2000/12/14 Hamlet
Anna 2000/12/14 SAS Programming
Witek 2001/07/12 XML
;
„Match-merging” data sets:
Data 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
24
;
run ;
proc sort data=students out=students_sort;
by name;
run ;
data st_books;
merge students_sort lib;
by name;
keep name sex title;
run ;
Data set LIB:
Obs name date title
1 Anna 2000-12-14 Hamlet 2 Anna 2000-12-14 SAS Programming 3 Witek 2001-07-12 XML
Result data set:
Obs name sex title
1 Anna F Hamlet2 Anna F SAS Programming3 Eva F4 Ian M5 Witek XML
„BY -group Processing” w DATA Stepiedata best_note worst_note;
set exam;
by st_code;
if first.st_code then
output best_note;
if last.st_code then
output worst_note;
„BY-group” jest podzbiorem obserwacji ze wspólną wartością zmiennej „BY-variable” (data set musi być posortowany wg tej zmiennej)
Użycie instrukcji BY w DATA step tworzy zmienne automatyczne, np.
FIRST.st_codeLAST.st_code
25
output worst_note;
keep st_code sem note;
run ;
ustawiane przez DATA step na 1 dla pierwszej (ostatniej) obserwacji w „BY-group-ie”
Data set EXAM:
st_code sem note
1 WS96/97 11 WS96/97 41 WS95/96 62 WS99/00 12 WS00/01 33 WS99/00 13 WS99/00 1...
BY-group
BY-group
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)
34
Goodness-of-Fit Tests for Weibull Distribution
Test Statistic DF p Value
Cramer-von Mises W-Sq 0.1169997 Pr > W-Sq 0.063
Anderson-Darling A-Sq 0.8760160 Pr > A-Sq 0.024
Chi-Square Chi-Sq 20.3972448 9 Pr > Chi-Sq 0.016
PROC CAPABILITY – szacowanie prawdopodobieństwa zdarzenia
proc capability data=test; var t;
spec lsl= 0.8 usl= 1.3;histogram / weibull;
35
run ;
PROC CAPABILITY – szacowanie prawdopodobieństwa zdarzenia
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).
PROC RELIABILITY - pplot
38
Recommended