SAS – projekt Analiza Danych Giełdowych
Transkrypt
SAS – projekt Analiza Danych Giełdowych
SAS – projekt Analiza Danych Giełdowych Zadanie 1 Fragment tabeli którą otrzymamy w wyniku działania skryptu. Kod programu: /* ZADANIE 1 */ /*Wczytanie danych z pliku kursy.txt*/ data SASPROJ.kursy; infile 'D:\Z\kursy.txt' delimiter = ',' firstobs = 2; input NAZWA $ DATA yymmdd10. OTWARCIE NAJWYZSZY NAJNIZSZY ZAMKNIECIE NUMER; format DATA ddmmyy10.; run; Zadanie 2 Raport który otrzymamy w wyniku działania skryptu. Kod programu: /* ZADANIE 2 */ /*Okrojony zapis kursow z kwietnia 2007*/ data SASPROJ.temp; set SASPROJ.kursy(firstobs=1);/*Co do tego firstobs=1, bez tego opuszczalo mi zawsze 1 obserwacje wiec wstawilem*/ if year(DATA)=2007 and month(DATA)=4 then output; keep NAZWA DATA ZAMKNIECIE; run; /*Zwroty w poszczegolnych dniach zadanego okresu*/ data SASPROJ.zwroty; set SASPROJ.temp(firstobs=1); retain poprz; if first.NAZWA then poprz = 0; if poprz = 0 then ZWROT = 0; else ZWROT = (ZAMKNIECIE-poprz)/poprz; poprz=ZAMKNIECIE; keep NAZWA DATA ZWROT; by NAZWA; run; /*Minimalny Maxmalny Sredni kurs*/ proc means data = SASPROJ.temp(firstobs=1) noprint; var ZAMKNIECIE; by NAZWA; output out = SASPROJ.statkursy (drop = _TYPE_ _FREQ_) min = minKurs max = maxKurs mean = srKurs; run; /*Sredni zwrot, wariancja zwrotow*/ proc means data = SASPROJ.zwroty(firstobs=1) noprint; var ZWROT; by NAZWA; output out = SASPROJ.statzwroty (drop = _TYPE_ _FREQ_) mean = srZwrot var = warZwrot; run; /*Tabela wynikowa z zadanymi statystykami*/ data SASPROJ.raport1; merge SASPROJ.statkursy(firstobs=1) SASPROJ.statzwroty(firstobs=1); by NAZWA; run; /*Raport*/ proc report data = SASPROJ.raport1(firstobs=1) headskip; define NAZWA / WIDTH=10 'Spolka/(nazwa)'; define minKurs / 'Min. kurs'; define maxKurs / 'Max. kurs'; define srKurs / 'Sr. kurs'; define srZwrot / WIDTH=20 'Sr. zwrot dzienny'; define warZwrot / WIDTH=20 'Wariancja zwrotow/dziennych'; run; Zadanie 3 Wykres który otrzymamy w wyniku działania skryptu. Kod programu: /* ZADANIE 3 */ /*srZwrot klasteryzacja*/ proc cluster method = centroid data = SASPROJ.statzwroty(firstobs=1) outtree = SASPROJ.srZwrotGr; var srZwrot; id NAZWA; run; /*warZwrot klasteryzacja*/ proc cluster method = centroid data = SASPROJ.statzwroty(firstobs=1) outtree = SASPROJ.warZwrotGr; var warZwrot; id NAZWA; run; /*srZwrot podzial na 2 grupy*/ proc tree nclusters = 2 data = SASPROJ.srZwrotGr(firstobs=1) out = SASPROJ.srZwrotTree(keep = _name_ cluster rename = (_name_ = NAZWA) rename = (cluster = srZwrotGr)); run; /*warZwrot podzial na 2 grupy*/ proc tree nclusters = 2 data = SASPROJ.warZwrotGr(firstobs=1) out = SASPROJ.warZwrotTree(keep = _name_ cluster rename = (_name_ = NAZWA) rename = (cluster = warZwrotGr)); run; /*Raport - podzial na grupy wg zadania*/ data SASPROJ.raport2; merge SASPROJ.srZwrotTree(firstobs=1) SASPROJ.warZwrotTree(firstobs=1); if (srZwrotGr = 1) and (warZwrotGr = 1) then grupa = 1; if (srZwrotGr = 2) and (warZwrotGr = 1) then grupa = 2; if (srZwrotGr = 1) and (warZwrotGr = 2) then grupa = 3; if (srZwrotGr = 2) and (warZwrotGr = 2) then grupa = 4; label NAZWA='NAZWA'; run; /*Maly porzadek*/ proc sort data = SASPROJ.raport2(firstobs=1); by NAZWA; run; /*Tabelka potrzebna do wyrysowania wykresu*/ data SASPROJ.wykres1; merge SASPROJ.statzwroty(firstobs=1) SASPROJ.raport2(firstobs=1); run; /*Rysowanie wykresu razem z opcjami podpisu punktow*/ goptions reset=all; axis1 label=('Wariancja Zwrotow'); axis2 label=('Srednia Zwrotow'); proc gplot data = SASPROJ.wykres1(firstobs=1); plot warZwrot * srZwrot = grupa / vaxis= axis1 haxis= axis2; symbol1 pointlabel = ("#NAZWA"); run; Zadanie 4 Fragment tabeli którą otrzymamy w wyniku działania skryptu. Wybrana spółka = DEBICA. Kod programu: /* ZADANIE 4 */ /* Wybieram spolke Debica i wybieram kursy z przedzialu 01.07.2007 - 06.06.2008*/ data SASPROJ.temp2; set SASPROJ.kursy(firstobs=1); if NAZWA="DEBICA" and DATA>=MDY(7,1,2007) and DATA<=MDY(6,6,2008) then output; keep NAZWA DATA ZAMKNIECIE; run; /*Dzien w ktrorym chcemy przewidziec kurs*/ data SASPROJ.dopisek; input NAZWA $ DATA ddmmyy10. ZAMKNIECIE; format DATA ddmmyy10.; cards; DEBICA 01/07/2008 . run; /*Dopisujemy wybrany dzien do tabeli z danymi*/ data SASPROJ.temp2; set SASPROJ.temp2(firstobs=1) SASPROJ.dopisek(firstobs=1); run; /*Wykonujemy regresje liniowa*/ proc reg data = SASPROJ.temp2(firstobs=1); model ZAMKNIECIE = DATA / p ; output out = SASPROJ.prognoza p=PROGNOZA; run; /*Maly porzadek*/ data SASPROJ.prognoza; set SASPROJ.prognoza(firstobs=1); label PROGNOZA='PROGNOZA'; run; Zadanie 5 Wykres który otrzymamy w wyniku działania skryptu. Wybrana spółka = DEBICA. Kod programu: /* ZADANIE 5 */ /*Wybieram spolke Debica i tworze tabele zwrotow*/ data SASPROJ.zwroty2; set SASPROJ.kursy(where=(NAZWA="DEBICA")); retain poprz; if poprz = . then ZWROT = 0; else ZWROT = (ZAMKNIECIE-poprz)/poprz; poprz=ZAMKNIECIE; keep NAZWA DATA ZWROT; run; /*Rysowanie histogramu*/ proc univariate data=SASPROJ.zwroty2 noprint; histogram ZWROT / endpoints = -0.5 to 0.5 by 0.1 vscale= count vaxislabel='Ilosc zwrotow' grid hoffset = 5 cfill = red; run; Zadanie 6 Okno do komunikacji z użytkownikiem powstałe w wyniku działania programu. Wykres który otrzymamy w wyniku działania skryptu. Wybrana spółka = DEBICA. Kod programu: /* ZADANIE 6 */ /*Okienko do komunikacji z uzytkownikiem*/ %let spolka; %window wprowadz "Podaj nazwe spolki:" spolka required = yes; %display wprowadz; /*Wyselekcjonowanie danych do wyrysowania podana przez uzytkownika nazwa spolki i rok 2007 */ data SASPROJ.wykres2; set SASPROJ.kursy(firstobs=1); if NAZWA = "&spolka" and year(DATA) = 2007; run; /*Rysowanie wykresu*/ goptions reset=all; proc gplot data = SASPROJ.wykres2(firstobs=1); plot ZAMKNIECIE*DATA; symbol1 interpol=join value=dot height=0.3; run; Załącznik A Listing całości programu. /*Ustalenie biblioteki*/ libname SASPROJ 'D:\Z\'; /* ZADANIE 1 */ /*Wczytanie danych z pliku kursy.txt*/ data SASPROJ.kursy; infile 'D:\Z\kursy.txt' delimiter = ',' firstobs = 2; input NAZWA $ DATA yymmdd10. OTWARCIE NAJWYZSZY NAJNIZSZY ZAMKNIECIE NUMER; format DATA ddmmyy10.; run; /* ZADANIE 2 */ /*Okrojony zapis kursow z kwietnia 2007*/ data SASPROJ.temp; set SASPROJ.kursy(firstobs=1);/*Co do tego firstobs=1, bez tego opuszczalo mi zawsze 1 obserwacje wiec wstawilem*/ if year(DATA)=2007 and month(DATA)=4 then output; keep NAZWA DATA ZAMKNIECIE; run; /*Zwroty w poszczegolnych dniach zadanego okresu*/ data SASPROJ.zwroty; set SASPROJ.temp(firstobs=1); retain poprz; if first.NAZWA then poprz = 0; if poprz = 0 then ZWROT = 0; else ZWROT = (ZAMKNIECIE-poprz)/poprz; poprz=ZAMKNIECIE; keep NAZWA DATA ZWROT; by NAZWA; run; /*Minimalny Maxmalny Sredni kurs*/ proc means data = SASPROJ.temp(firstobs=1) noprint; var ZAMKNIECIE; by NAZWA; output out = SASPROJ.statkursy (drop = _TYPE_ _FREQ_) min = minKurs max = maxKurs mean = srKurs; run; /*Sredni zwrot, wariancja zwrotow*/ proc means data = SASPROJ.zwroty(firstobs=1) noprint; var ZWROT; by NAZWA; output out = SASPROJ.statzwroty (drop = _TYPE_ _FREQ_) mean = srZwrot var = warZwrot; run; /*Tabela wynikowa z zadanymi statystykami*/ data SASPROJ.raport1; merge SASPROJ.statkursy(firstobs=1) SASPROJ.statzwroty(firstobs=1); by NAZWA; run; /*Raport*/ proc report data = SASPROJ.raport1(firstobs=1) headskip; define NAZWA / WIDTH=10 'Spolka/(nazwa)'; define minKurs / 'Min. kurs'; define maxKurs / 'Max. kurs'; define srKurs / 'Sr. kurs'; define srZwrot / WIDTH=20 'Sr. zwrot dzienny'; define warZwrot / WIDTH=20 'Wariancja zwrotow/dziennych'; run; /* ZADANIE 3 */ /*srZwrot klasteryzacja*/ proc cluster method = centroid data = SASPROJ.statzwroty(firstobs=1) outtree = SASPROJ.srZwrotGr; var srZwrot; id NAZWA; run; /*warZwrot klasteryzacja*/ proc cluster method = centroid data = SASPROJ.statzwroty(firstobs=1) outtree = SASPROJ.warZwrotGr; var warZwrot; id NAZWA; run; /*srZwrot podzial na 2 grupy*/ proc tree nclusters = 2 data = SASPROJ.srZwrotGr(firstobs=1) out = SASPROJ.srZwrotTree(keep = _name_ cluster rename = (_name_ = NAZWA) rename = (cluster = srZwrotGr)); run; /*warZwrot podzial na 2 grupy*/ proc tree nclusters = 2 data = SASPROJ.warZwrotGr(firstobs=1) out = SASPROJ.warZwrotTree(keep = _name_ cluster rename = (_name_ = NAZWA) rename = (cluster = warZwrotGr)); run; /*Raport - podzial na grupy wg zadania*/ data SASPROJ.raport2; merge SASPROJ.srZwrotTree(firstobs=1) SASPROJ.warZwrotTree(firstobs=1); if (srZwrotGr = 1) and (warZwrotGr = 1) then grupa = 1; if (srZwrotGr = 2) and (warZwrotGr = 1) then grupa = 2; if (srZwrotGr = 1) and (warZwrotGr = 2) then grupa = 3; if (srZwrotGr = 2) and (warZwrotGr = 2) then grupa = 4; label NAZWA='NAZWA'; run; /*Maly porzadek*/ proc sort data = SASPROJ.raport2(firstobs=1); by NAZWA; run; /*Tabelka potrzebna do wyrysowania wykresu*/ data SASPROJ.wykres1; merge SASPROJ.statzwroty(firstobs=1) SASPROJ.raport2(firstobs=1); run; /*Rysowanie wykresu razem z opcjami podpisu punktow*/ goptions reset=all; axis1 label=('Wariancja Zwrotow'); axis2 label=('Srednia Zwrotow'); proc gplot data = SASPROJ.wykres1(firstobs=1); plot warZwrot * srZwrot = grupa / vaxis= axis1 haxis= axis2; symbol1 pointlabel = ("#NAZWA"); run; /* ZADANIE 4 */ /* Wybieram spolke Debica i wybieram kursy z przedzialu 01.07.2007 - 06.06.2008*/ data SASPROJ.temp2; set SASPROJ.kursy(firstobs=1); if NAZWA="DEBICA" and DATA>=MDY(7,1,2007) and DATA<=MDY(6,6,2008) then output; keep NAZWA DATA ZAMKNIECIE; run; /*Dzien w ktrorym chcemy przewidziec kurs*/ data SASPROJ.dopisek; input NAZWA $ DATA ddmmyy10. ZAMKNIECIE; format DATA ddmmyy10.; cards; DEBICA 01/07/2008 . run; /*Dopisujemy wybrany dzien do tabeli z danymi*/ data SASPROJ.temp2; set SASPROJ.temp2(firstobs=1) SASPROJ.dopisek(firstobs=1); run; /*Wykonujemy regresje liniowa*/ proc reg data = SASPROJ.temp2(firstobs=1); model ZAMKNIECIE = DATA / p ; output out = SASPROJ.prognoza p=PROGNOZA; run; /*Maly porzadek*/ data SASPROJ.prognoza; set SASPROJ.prognoza(firstobs=1); label PROGNOZA='PROGNOZA'; run; /* ZADANIE 5 */ /*Wybieram spolke Debica i tworze tabele zwrotow*/ data SASPROJ.zwroty2; set SASPROJ.kursy(where=(NAZWA="DEBICA")); retain poprz; if poprz = . then ZWROT = 0; else ZWROT = (ZAMKNIECIE-poprz)/poprz; poprz=ZAMKNIECIE; keep NAZWA DATA ZWROT; run; /*Rysowanie histogramu*/ proc univariate data=SASPROJ.zwroty2 noprint; histogram ZWROT / endpoints = -0.5 to 0.5 by 0.1 vscale= count vaxislabel='Ilosc zwrotow' grid hoffset = 5 cfill = red; run; /* ZADANIE 6 */ /*Okienko do komunikacji z uzytkownikiem*/ %let spolka; %window wprowadz "Podaj nazwe spolki:" spolka required = yes; %display wprowadz; /*Wyselekcjonowanie danych do wyrysowania podana przez uzytkownika nazwa spolki i rok 2007 */ data SASPROJ.wykres2; set SASPROJ.kursy(firstobs=1); if NAZWA = "&spolka" and year(DATA) = 2007; run; /*Rysowanie wykresu*/ goptions reset=all; proc gplot data = SASPROJ.wykres2(firstobs=1); plot ZAMKNIECIE*DATA; symbol1 interpol=join value=dot height=0.3; run; quit;