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;

Podobne dokumenty