/* 2017.02.20 3. gyakorlat - SAS Fuggvenyek alkalmazasa, valtozok kepzese, Egy lepesben tobb adatallomany eloallitasa Statisztikai tabla alapok */ /* substr(): egy string adott karakteretol milyen hosszan olvasson ki egy karakterlancot */ data la17.kek2; set la17.kekjo ; ora = substr(befut,1,2); perc = substr(befut,4,2); mp = substr(befut,7,2); /* ido valtozoban kiszamitjuk a futott valtozo erteket s-ban */ if _N_ lt 5 then ido = 3600*(ora-9) + 60*perc + mp ; /* a verseny 9h-kor kezdodott, ezert ezzel szamolni kell */ else ido = 15*3600 + 3600*ora + 60*perc + mp ; /* a 9h-s kezdes miatt 15h-t mentek elso nap + 2. napi futott ido */ /* korrigalt uj valtozoban kiszamitjuk a korrig valtozo ertekeit */ korrigalt = ido/ys*100 ; run; /* Egy lepesben tobb adatallomany letrehozasa SELECT vezerlesi szerkezettel ys szerinti sebesseg csoportok kialakitasa kulon allomanyokba */ data la17.gyors la17.kozep la17.lassu ; set la17.kek2; select; when(ys < 90) output la17.gyors; when(ys < 110) output la17.kozep ; otherwise output la17.lassu ; end; run; /* yardstick szamok eloszlasanak megtekintese a 3 sebesseg csoportban */ proc univariate data=la17.gyors; histogram ys; run; proc univariate data=la17.kozep; histogram ys; run; proc univariate data=la17.lassu; histogram ys; run; /* Statisztikai tabla keszitese A nomenklaturakat (diszkret valtozo, osztalyozo valtozo) a CLASS kulcsszoval vezetjuk be A mutatokat (ertek jellegu adatokat, folytonos valtozo) a VAR kulcsoval vezetjuk be a TABLE-ben keszul a stat. tabla */ proc tabulate data=la17.kek2 ; class ys ; var ido; table ys; /* A tabla sora - most csak egydimenzios a tabla */ run; /* ketdimenzios tablak: vesszovel valasztjuk el az egyes dimenziokat */ proc tabulate data=la17.kek2 ; class ys ; var ido; table ys, ido; /* alapertelmezetten SUM fut le, vagyis osszegzi az idoket */ run; proc tabulate data=la17.kek2 ; class ys ; var ido; table ys, ido*n ido*mean; /* esetszamok es atlagok kiiratasa */ run; /* karakteres valtozok numerikussa konvertalasa ahol az ora valtozo valojaban csak szamokat tartalmaz kora-ban (korrigalt ora) kiszamitjuk, hogy melyik hajo mennyi orat futott (mindezt lehetne az elso DATA step-ben is kiegesziteni: lasd 2. data step-ben) */ data la17.kek2; set la17.kek2; kora = 1*ora ; if _N_ lt 5 then kora=kora-9; else kora=kora+15; run; data la17.kek2 ; set la17.kekjo ; ora=substr(Befut,1,2) ; kora=1*ora ; perc=substr(Befut,4,2) ; mp=substr(Befut,7,2) ; if _N_ lt 5 then do ; ido= 3600*(ora-9)+60*perc+mp ; kora=kora-9 ; end ; else do ; ido= 15*3600 +3600*ora+60*perc+mp ; kora=kora+15 ; end ; korrigalt=ido*100/ys ; run ; /* A stat. tablaban a futott orak atlagait is kiiratjuk ys szerint */ proc tabulate data=la17.kek2 ; class ys ; var ido kora; table ys, ido*n ido*mean kora*mean; run;