Matematikai statisztikai programcsomagok gyakorlat Statisztikai programok 2. PÓTZH MEGOLDÁS Matematikus BSC képzés 2010.12.09.
Állományok: Adott két SAS adatállomány cdr_pot.sas7bdat és a custinform_pot.sas7bdat. CDR_pot adatállomány: tartalmaz egy ügyfél azonosítót és az ügyfél csúcsidőben történt telefonálásainak idejét. Custinform_pot adatállomány: Ez a tábla az egyes ügyfelek demográfiai és egyéb jellemzőit tartalmazza. Ez a tábla is tartalmaz egy ügyfél azonosítót. 1. feladat (2 pont) Készítsen egy saját könyvtárat a SAS-ban és helyezze el benne a fenti két táblát. A feladatok megoldása során ebbe a könyvtárba dolgozzon. libname potzh 'd:\munka\sas_oktatas\zh\adatok\'; 2. feladat (8 pont) Sajnálatos módon egyes ügyfelek nem adták meg a korukat, így a bevitt adatok között hiányzó (.) értékek szerepelnek az age változó esetén. Pótolja a hiányzó értékeket véletlen számok generálásával. A véletlen szám értéke egy [x,y] intervallumból kerüljön ki, ahol x értéke az alsó kvantilis (q1) y értéke pedig a felső és alsó kvantilis értéke, azaz (q3-q1). Segítség: Első lépésben határozza meg a szükséges (q1 - alsó kvantilis, q3 felső kvantilis) leíró statisztikai értékeket. Ezekből az értékekből meg lehet határozni a kívánt intervallumot, amit a véletlen szám generálásnál fel kell használnia. Ezek után feltétel alkalmazásával vizsgálja meg, hogy az age változó hiányzó (.) értékkel rendelkezik e. Ha igen, akkor generáljon egy véletlen számot, mely az értékét, az előző lépésben meghatározott intervallumból veszi. Az [b,b+a] intervallumba eső véletlen szám generálása az alábbi kód segítségével lehetséges. num=a*ranuni(1)+b; /*Ahol num: a general véletlen szám; a:az intervallum szélessége; b:az intervallum alsó értéke; ranuni(1): eredménye egy 0-1 közti szám*/
/*Kvantilisek lekérdezése - intervallum meghatározása*/ proc means data=potzh.custinform_pot mean q1 q3; q1:20 b:20 q3:38 a:q3-q1=18 Az intervallum: [20;20+18] /*Pótlás - véletlen szám generálással*/ data potzh.replace(drop=num); set potzh.custinform_pot; num=18*ranuni(1)+20; if age=. then age=num; 3. feladat (2 pont) Kódolja át a tarifa értékeket. Segítség: Hozzon létre egy új változót, az alábbi feltételeknek megfelelően: Tarifa Értéke CAT 100 1 CAT 200 2 CAT 50 3 Play 100 4 Play 300 5 data potzh.custinform_pot_cat; set potzh.custinform_pot; select (tariff); when('cat 100') tariff_cat=1; when('cat 200') tariff_cat =2; when('cat 50') tariff_cat =3; when('play 100') tariff_cat =4; when('play 300') tariff_cat =5; otherwise tariff_cat=0; end; label tariff_cat ='Tarifacsomag kategorizálva';
4. feladat (3 pont) Táblázat készítése. Jelenítse meg a csúcsidőben történt hívások összes idejének százalékos megoszlását az előző feladatban képzett tarifa kategória és nemek szerinti bontásban. A táblában szerepeljenek az összesen értékek. Formázni ebben a feladatban nem szükséges. /*Táblák összekapcsolása*/ proc sql; create table potzh.tabulate as select a.*, b.* from potzh.cat_custinform_pot_cat as a left join potzh.cdr_pot as b on a.customer_id=b.customer_id; quit; /*Táblázat készítése*/ proc tabulate data=potzh.tabulate; class tariff_cat gender; var peak_mins; table tariff_cat all, gender*peak_mins*pctsum all*peak_mins*pctsum; Eredmény: (a tábla eredményei eltérhetnek, mert véletlenszerűen generáltuk a hiányzó értékeket)
5. feladat (3 pont) Előző tábla formázása. Segítség: (proc format, címkézés, formátumok, fejléc, lábléc ) Elvárás: Hasonló kinézetű tábla készítése /*Kategorizálás*/ data potzh.tabulate; set potzh.tabulate; if age lt 10 then age_cat=1; else if age lt 25 then age_cat=2; else if age lt 35 then age_cat=3; else if age lt 50 then age_cat=4; else if age ge 50 then age_cat=5; else age_cat=0; proc format; picture szazalek value $nem value kat LOW-HIGH='000.00 %'; 'F'='Nok' 'M'='Férfiak'; 1='Fiatal' 2='Tini' 3='Felnott' 4='Középkorú' 5='Öreg' 0='Ismeretlen'; /*Formázott tábla készítése*/ proc tabulate data=potzh.tabulate; class age_cat gender; var peak_mins; table age_cat='kor kategória' all='összesen', gender*peak_mins*pctsum=''*f=szazalek8. all='összesen'*peak_mins*pctsum=''*f=szazalek8. /RTS=15 box='telefonálási szokások'; title 'Formázott tábla'; footnote 'Készítette: Gipsz Jakab'; format gender $nem. age_cat kat.;
Eredmény: (a tábla eredményei eltérhetnek, mert véletlenszerűen generáltuk a hiányzó értékeket)