Tento učební text vznikl za přispění Evropského sociálního fondu a státního rozpočtu ČR prostřednictvím Operačního programu Vzdělávání pro konkurenceschopnost v rámci projektu Univerzitní výuka matematiky v měnícím se světě (CZ.1.07/2.2.00/15.0203). Obsah: 1. Úvod do práce v SAS. 2. Knihovny, tabulky, import. 3. Úvod do SQL. 4. Proc SQL – pokračování. 5. SAS functions a CALL routines, SAS data step. 6. SAS formáty, podmíněné kódy, cykly, pole. 7. Spojování tabulek, transpozice. 8. Kontingenční tabulky, PROC FREQ, PROC UNIVARIATE. 9. SAS/GRAPH. Úvod do SAS EM (data miner). 10. PROC CORR, PROC REG, PROC SCORE. 11. PROC LOGISTIC. 12. Evaluace prediktivního modelu. 4 28 41 50 59 70 80 88 94 112 119 127 4 Cvičení 1 5 Sofware SAS Aktuálně k dispozici:  SAS 9.3 TS1M2, Rev. 930_12w41 for  Microsoft® Windows® Workstation & Server 32-bit  Microsoft® Windows® Server & Workstation for x64  Linux® for X64  SAS EAS  Credit Scoring for SAS Enterprise Miner  SAS Enterprise Guide  SAS Enterprise Miner Personal Client  SAS Enterprise Miner Server, including the products: • SAS Enterprise Guide  SAS Forecast Server  SAS Metadata Server  SAS Text Analytics for Czech  SAS Text Miner Server  JMP Pro (Microsoft® Windows® for x64, JMP 10.0.1 TS1M2, Rev. 930_12w41) 6 Sofware SAS SAS EAS: Education Analytical Suite = Base SAS®, SAS/ACCESS® rozhraní (pro všechny databáze), SAS/AF®, SAS/ASSIST®, SAS® Bridge for ESRI, SAS/CONNECT®, SAS/EIS®, SAS® Enterprise Guide®, SAS/ETS®, SAS/FSP®, SAS/GRAPH®, SAS/IML®, SAS/INSIGHT®, SAS/Integration Technologies®, SAS/LAB®, SAS/OR®, SAS/QC®, SAS/SECURE®, SAS/SHARE®, SAS/STAT® 7 Instalační soubory, licenční podmínky  Instalační soubory SASu (v.9.3) jsou k dispozici všem studentům a učitelům MU na adrese https://inet.muni.cz/app/soft/licence.  Před vlastním zobrazením stránky s inst. soubory je nutné odsouhlasit licenční podmínky.  Plný instalační depot 23 GB! 8 Instalační soubory, licenční podmínky  K dispozici i návody pro instalaci 9 Instalační soubory, licenční podmínky  Dále je třeba stáhnout SID files, ve kterých je uložena informace o platnosti licence a umožní fungování SASu. Instrukce, jak tyto soubory použít, je součástí stahovaného souboru. 10 Instalační soubory, licenční podmínky  Instalační soubory SASu (v.9.2) jsou k dispozici všem studentům a učitelům ÚMS PřF MU na webu ÚMS v zabezpečené zóně (přístup pod loginem a heslem do domény).  Před vlastním zobrazením stránky s inst. soubory je nutné odsouhlasit licenční podmínky. 11 Instalační soubory, licenční podmínky  Po odsouhlasení licenčních podmínek jsou k dispozici zkomprimované instalační depa pro OS Windows 32/64bit a Linux 32/64bit. 12 Práce v SAS -server  Pro studenty (i vyučující) je dostupný SAS na 12 PC ve verzi 9.2 pro Linux+Windows (virtuálních) a dalších 24 PC ve verzi Linux.  Dále je k dispozici serverová verze 9.3 nainstalovaná na Citrix.  Výuka probíhá ve verzi Windows na Citrixu. link na přihlášení se na server Citrix Screenshot (výřez) pracovní plochy: 13 Práce v SAS – lokální verze  Na PC (v učebně MP2) je SAS k dispozici lokálně ve verzi 9.2 pro Linux+Windows (virtuálních)  V učebně MP1 je SAS k dispozici lokálně ve verzi 9.2. pro Linux. link na verzi „windows“ link na vezi linux Screenshot (výřez) pracovní plochy: 14 Práce v SAS – verze linux  K dispozici SAS 9.2  Po spuštění se otevře 6 oken (Results, Explorer, Toolbox, Output, Log, Program Editor)  Uživatelský komfort je na velmi nízké úrovni, nicméně vše je funkční a pracovat se v „tom“ dá. 15  Po spuštění Windows ve virtuálním prostředí je třeba se přihlásit do domény. Práce v SAS – verze 9.2 pro windows  Po přihlášení je k dispozici:  SAS 9.2  SAS Enterprice Guide 4.3  IML Studio 3.3 16 Práce v SAS – verze 9.2 pro windows  Vlastní práce v SASu se pak nijak neliší od práce v „klasických“ windows.  Ukládat kódy a datové tabulky lze jak na lokálním disku tak na síti v rámci domény. 17 Enterprice Guide  Nejprve je třeba vytvořit nový projekt. 18 Enterprice Guide  Načteme data (customer.sas7bdat – studijní materiály v ISu) 19 Enterprice Guide  Lze přepnout zpět na Process Flow  Zobrazí se datová tabulka: 20 Enterprice Guide  V záložkách si lze vybrat z řady úloh (kont./frekvenční tabulky, grafy, ANOVA, regrese,…): 21 Enterprice Guide  V záložce „Data“ vybereme proměnné a přiřadíme jim role:  Např. prom. „Country“ označíme jako „Clasissification“ proměnnou.  Dále je možné volit např. způsob setřídění výstupu. 22 Enterprice Guide  V záložce „Summary Tables“ nadizajnujeme kontingenční tabulku: 23 Enterprice Guide  Po kliknutí na „Preview code“ se zobrazí okno se SASovským kódem, který lze upravovat nebo zkopírovat a použít v programovacím prostředí SASu. 24 Enterprice Guide  Po kliknutí na „Preview code“ se zobrazí okno se SASovským kódem, který lze upravovat nebo zkopírovat a použít v programovacím prostředí SASu.  V záložce „Properties“ lze měnit styl …např. na „sasweb“ 25 Enterprice Guide  V Process Flow přibude uzel pro zvolenou úlohu (Summary Tables) a uzel s výsledky. 1. V SAS EG Vytvořte kontingenční tabulku pro prom. Country a Gender (tabulka customer) obsahující absolutní a relativní četnosti včetně řádkově a sloupcově podmíněných relativních četností. 2. Vytvořte koláčový graf pro prom. Country se zobrazením relativních četností. 26 Úkoly 27 Úkoly 3. Přeneste příslušné kódy z úkolů 1 a 2 do programovacího prostředí a vygenerujte stejnou tabulku a graf. 4. V Helpu nebo na support.sas.com zjistěte další možnosti úpravy grafu (3D, barvy, fonty písma…) 28 Cvičení 2 29 Libname Slouží pro namapování knihovny – typicky jde o adresář na pevném disku. Libname _234567 "D:\dukumenty\prace\vyuka\Data_Mining_1"; Libname dm1 "z:\dm1\data"; 30 Libname • Základní knihovny jsou Maps, Sashelp, Sasuser a Work Libname _234567 "D:\dukumenty\Data_Mining_1"; 31 Libname • „Knihovnu“ lze smazat ….smaže se pouze odkaz (na disku se nic fyzicky nemaže), přesto je třeba akci potvrdit. 32 Datové tabulky • Datové tabulky v knihovně lze zobrazit pomocí ViewTable (dvojklik na tabulku nebo „Open“ v menu vyvolaném pravým tlačítkem myši nad vybranou tabulkou) • Lze také zobrazit vlastnosti vybrané tabulky (obecné vlastnosti, seznam sloupců, jejich formáty,…) 33 Datové tabulky • Tabulku lze kopírovat do schránky a následně uložit (Paste) do jiné knihovny. • Lze také (v rámci dané knihovny) provést duplikaci nebo přejmenování tabulky. • Tabulku lze smazat …. je třeba akci potvrdit o Po potvrzení se tabulka fyzicky z disku smaže!!! 34 Datové tabulky • V rámci ViewTable lze provádět např. setřídění podle vybraného sloupce. • Také lze data filtrovat pomocí Where filtru (vyvolá se stisknutím pravého tlačítka myši). 35 Import v SAS EG • Pomocí File - Open – Data • nebo File – Import Data 36 Import v SAS EG • „Open data“ neumí načíst příliš velká data (otevře pomocí poznámkového bloku). Pro „malá“ data se spustí „Import data“ wizard. • File – Import data funguje i pro velká data. 37 Import v SAS EG • Lze nastavit kódování, oddělovač sloupců (čárka, středník, tabulátor,…), info zda první řádek obsahuje názvy sloupců,… 38 Import v SAS EG • Lze ručně nastavit názvy sloupců a jejich formáty. 39 Úkoly 1. Vytvořte si svoji knihovnu. Zkopírujte do ní tabulku Cars z knihovny Sashelp. Zjistěte jaké sloupce obsahuje, včetně formátů. Seřaďte tabulku podle sloupce Type (sestupně). Vyfiltrujte data jen na řádky s hodnotou „Truck“ ve sloupci Type. 2. Importujte soubor cs-training.csv (pomocí SAS EG, Wizardu v programovacím prostředí i pomocí Data Stepu. Vytvořenou tabulku uložte (pomocí Data Stepu) v komprimované podobě a porovnejte velikosti tabulek na disku. 40 Úkoly 3. Pomocí ODS vytvořte html, rtf a pdf soubor obsahující výpis tabulky Cars – zajímá nás značka, název modelu a výkon automobilů. Výpis filtrujte jen na typ „Truck“ (where Type EQ ‘Truck’). 41 Cvičení 3 42 • Úkolem je např. vypsat zákazníky, kteří mají záznam v tabulce A a nemají záznam v tabulce B. V tomto případě lze využít left join a faktu, že záznamy z tabulky B, které se nepodaří propojit z tabulkou A, budou mít null (missing) hodnotu u propojovací proměnné. Je jen potřeba myslet na to že null hodnota je u: • textové prom. reprezentována pomocí ‘’. • numerické prom. pomocí tečky, tj. „.“ Množinový rozdíl při spojování tabulek 43 • Pro předchozí úlohy lze využít i vnořeného dotazu. • Vnořený dotaz není nic jiného, než příkaz SELECT vnořený do jiného příkazu SELECT. Vnořené dotazy využijeme tam, kde potřebujeme nejprve zjistit nějakou informaci a v závislosti na ní zjistit pak informace další. • Např. : Více na: http://interval.cz/clanky/sql-vnorene-dotazy/ Vnořený dotaz (vnořený select) SELECT jmeno, prijmeni FROM platy WHERE plat > (SELECT mean(plat) FROM platy) SELECT nazev, cena FROM kniha, vytisk WHERE kniha.id = vytisk.publikace_id AND cena = (SELECT MIN(cena) FROM výtisk) 44 • Vnořený dotaz může vracet i více než jen jednu hodnotu. • Např. dotaz na názvy knih vydaných v týchž letech, jako díla Aloise Jiráska Více na: http://interval.cz/clanky/sql-vnorene-dotazy/ Vnořený select SELECT název FROM kniha, autoři, napsané_knihy, výtisk WHERE kniha.id = napsané_knihy.publikace_id AND napsané_knihy.autor_id = autoři.id AND kniha.id = výtisk.publikace_id AND rok IN ( SELECT rok FROM autoři a, výtisk v, napsané_knihy n WHERE a.id = n.autor_id AND n.publikace_id = v.publikace_id AND a.jméno LIKE 'Alois' AND a.příjmení LIKE 'Jirásek' ) 45 • Další možnosti vnořených dotazů dává použití operátorů NOT, ALL, ANY. • Např. : Více na: http://www.amadeus.co.uk/sas-technical-services/tips-and-techniques/sql/using-the-any-and-all-operators-in-proc-sql/ Vnořený select proc sql; select name, sales from mozart_shoes where sales gt any (select sales from top_brands); quit; proc sql; select name, sales from mozart_shoes where sales not lt all (select sales from top_brands); quit; 46 • Typicky jde o situace, kdy • jedno ID záznamu (klienta) má více záznamů (klientů) • jeden záznam (klient) má více ID záznamu (klienta) • jeden klient má více ID záznamu (např. 2 (více) záznamy (ů) se liší ve jméně klienta jen díky překlepu) • … Duplicity 47 Úkoly 1. Spojením (pomocí proc sql) tabulek customers a customerorders vytvořte tabulku obsahující typ zákazníka (customer type), celkový počet nákupů/kusů zboží, celkový objem prodeje, průměrnou prodejní cenu pro skupiny dané typem zákazníka a seřazené sestupně podle celkového objemu prodeje. Názvy nových sloupců opatřete vhodným labelem a formát posledních dvou sloupců nastavte na dollar12.2. 2. viz 1, ale skupiny dané pomocí CustomerGroup a jen ty, které mají celkový objem prodeje >= 10.000. 48 Úkoly 3. Zjistěte kolik zákazníků (unikátních ID) z tabulky customers a) má nějaký záznam v tabulce customerorders , b) kolik jich tam nemá žádný záznam c) a zda tabulka customers neobsahuje duplicity. 49 Úkoly 4. Pomocí vnořeného dotazu vypište ID zákazníků a celkový objem prodeje zákazníků z tabulek customers a customerorders, kteří mají celkový objem prodeje větší než je průměrný objem prodeje příslušný jednomu zákazníkovi. Výstup seřaďte sestupně podle spočteného objemu prodeje. Nastavte vhodný label a formát objemu prodeje nastavte na dollar12.2. 50 Cvičení 4 51 • Mimo základní využití proc sql pro výběr definovaných podmnožin daných datových tabulek lze proc sql použít také pro: • vytváření nových tabulek • update existujících tabulek • úpravu existujících tabulek • mazání existujících tabulek • … Více na: http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001384710.htm Proc SQL 52 • With the SET clause, you assign values to columns by name. The columns can appear in any order in the SET clause. The following INSERT statement uses multiple SET clauses to add two rows to NEWCOUNTRIES: http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001387930.htm proc sql; insert into sql.newcountries set name='Bangladesh', capital='Dhaka', population=126391060 set name='Japan', capital='Tokyo', population=126352003; quit; 53 • With the VALUES clause, you assign values to a column by position. The following INSERT statement uses multiple VALUES clauses to add rows to NEWCOUNTRIES. http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001387930.htm proc sql; insert into sql.newcountries values ('Pakistan', 'Islamabad', 123060000, ., ' ', .) values ('Nigeria', 'Lagos', 99062000, ., ' ', .); quit; 54 • You can insert the rows from a query result into a table. The following query returns rows for large countries (over 130 million in population) from the COUNTRIES table. The INSERT statement adds the data to the empty table NEWCOUNTRIES, which was created earlier in “Creating Tables Like an Existing Table”: http://support.sas.com/documentation/cdl/en/sqlproc/62086/HTML/default/viewer.htm#a001387930.htm proc sql; create table sql.newcountries like sql.countries; proc sql; insert into sql.newcountries select * from sql.countries where population ge 130000000; quit; 55 Úkoly 1. Vypište prvních 5 záznamů tabulky customers. 2. Vytvořte tabulku obsahující všechny sloupce tabulky customers a obsahujicí klienty (jen unikátní záznamy), jejichž příjmení začíná písmenem „M“ a kteří podle údajů v customerorders nakoupili zboží s jednotkovou cenou v intervalu 100 – 150. 56 Úkoly 3. Do takto (úkol 2) vytvořené tabulky přidejte řádky splňující předchozí podmínky s tím rozdílem, že příjmení začíná písmenem „H“. 57 Úkoly 4. Vypište (pomocí proc sql) křestní jméno a příjmení zákazníků z tabulky Customers a) jejichž příjmení obsahuje „00“ (pomocí like i contains) b) jejichž příjmení má druhé a třetí písmeno „o“ a výsledky porovnejte. 58 Úkoly 5. Vytvořte tabulku obsahující všechny údaje tabulky customorders a navíc nový sloupec, jehož hodnoty jsou definované takto: „high unit price“ pokud UnitPrice > 120 „mid unit price“ pokud 40 SUBSTR(string, position<,length>) • If length is zero, a negative value, or larger than the length of the expression that remains in string after position, SAS extracts the remainder of the expression. SAS also sets _ERROR_ to 1 and prints a note to the log indicating that the length argument is invalid. • If you omit length, SAS extracts the remainder of the expression. • Více na: The FIND function searches string for the first occurrence of the specifiedsubstring, and returns the position of that substring. If the substring is not found in string, FIND returns a value of 0. string…specifies a character constant, variable, or expression that will be searched for substrings. substring…is a character constant, variable, or expression that specifies the substring of characters to search for in string. startpos…is a numeric constant, variable, or expression with an integer value that specifies the position at which the search should start and the direction of the search. 61 Funkce find: SAS functions nad CALL routiens FIND(string,substring<,startpos><,modifiers>) If startpos is not specified, FIND starts the search at the beginning of the stringand searches the string from left to right. If startpos is specified, the absolute value of startpos determines the position at which to start the search. The sign of startpos determines the direction of the search. Více na: 62 SAS functions nad CALL routiens http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/ viewer.htm#a002267763.htm FIND(string,substring<,startpos><,modifiers>) The WEEKDAY function produces an integer that represents the day of the week, where 1=Sunday, 2=Monday, ..., 7=Saturday. Returns the count of the number of interval boundaries between two dates, two times, or two datetime values. Returns the current date as a numeric SAS date value. Returns the largest integer that is less than or equal to the argument Více na: 63 SAS functions nad CALL routiens http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212868.htm WEEKDAY(date) INTCK(interval,start-from, increment,< 'alignment'>) TODAY() FLOOR(argument) 64 K řešení úkolů je jinak dostačující učební text k přednášce. V případě hlubšího zájmu viz: Proc Sort: Proc Format: Data step: http://support.sas.com/documentation/cdl/en/basess/58133/HTML/ default/viewer.htm#a001302699.htm http://support.sas.com/documentation/cdl/en/proc/61895/HTML/ default/viewer.htm#a000057941.htm http://support.sas.com/documentation/cdl/en/proc/61895/HTML/ default/viewer.htm#a000063536.htm 65 Úkoly 1. Vytvořte tabulku z tabulky Customers (proc sql), kde vytvoříte nový sloupec s kódem státu klienta (z CustomerAdrress2 pomocí funkcí substr, find). Následně nastavte délku tohoto sloupce na 2 a zjistěte úsporu diskového prostoru. 66 Úkoly 2. Vytvořte tabulku sales0 (pomocí proc sort), která bude obsahovat údaje z tabulky sales a bude seřazená podle pohlaví (Gender)… tak, že nejprve budou uvedeni muži… a současně seřazená vzestupně podle příjmení (Last_Name). 67 Úkoly 3. Vypište (do rtf/pdf) vytvořenou tabulku z bodu 1 se sloupci Employee_ID, Gender, Salary a Country s vhodnými formáty sloupců (u sloupců Gender, Salary a Country vlastní formát (viz přednáška). U všech sloupců použijte popisky (labely) i hodnoty ve sloupcích v češtině. 68 Úkoly 4. Pomocí data stepu vytvořte tabulku sales2 obsahující prvních pět sloupců a řádky tabulky sales splňující podmínky: Gender = „M“, Salary > 30 000. 69 Úkoly 5. Pomocí data stepu vytvořte tabulku sales3 z tabulky sales, ve které vzniknou nové sloupce: • odchylka od průměrného příjmu • rok narození • měsíc narození • den v týdnu příslušný datu narození (s českým názvem dne) • rok nástupu do firmy • měsíc nástupu do firmy • věk v letech (k aktuálnímu datu) • věk v letech k datu nástupu do firmy 70 Cvičení 6 Writes date values as the name of the month The example table uses the input value of 16500, which is the SAS date value that corresponds to March 5, 2005. Více na: 71 SAS formats http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000201049.htm MONNAMEw. format Returns a value using a specified format. Např.: put(OrderDate,monname.) as order_month Value_after_30_years = put(Retirement, dollar12.2); Více na: 72 PUT function http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000199354.htm PUT(source, format.) 73 Úkoly 1. Vytvořte formát …1=‘Leden’, 2=‘Únor’, other=‘ostatní’. Pomocí něj v tabulce Customerorders transformujte sloupec OdrerDate a vypište (proc sql) celkový úhrn tržeb (format dollar12.2) pro skupiny nově vytvořeného sloupce. Výpis seřaďte podle vypočteného úhrnu tržeb sestupně. 74 Úkoly 2. Vypište celkový úhrn tržeb v tabulce Customerorders pro jednotlivé měsíce v roce. Výpis bude obsahovat číslo měsíce, jeho anglický název a úhrn tržeb…seřazeno podle čísla měsíce vzestupně. 75 Úkoly 3. Pomocí jednoho data stepu vytvořte dvě nové tabulky z tabulky Customers tak, že v první nové tabulce budou zákazníci s CustomerType = “inactive”, ve druhé nové tabulce budou zákazníci s CustomerType různým od “inactive”. Ve druhé tabulce současně vytvořte sloupec Type, který nabývá hodnoty “Club Member” pro CustomerID <2000 a hodnoty “Gold Club Member” jinak. 76 Úkoly 4. Z tabulky Customerorders vytvořte pomocí data stepu tabulku, která obsahuje nový sloupec s názvem Level. Jeho hodnoty jsou v každém řádku podmíněny hodnotou UnitPrice takto: Level = ‘Level I’ pro UnitPrice <=30, Level = ‘Level II’ pro 30 120. Následně zjistěte absolutní četnosti jednotlivých hodnot sloupce Level. 77 Úkoly 5. Z tabulky USemps pomocí data stepu vytvořte tabulku Retire obsahující sloupce EmployeeID , Salary, Investment, Value_after_30_years, Value_after_40_years a Value_after_50_years. Poslední tři sloupce (ve formátu dollar12.2) představují částku naspořenou po 30-ti, 40-ti a 50-ti letech, za předpokladu, že daný zaměstnanec ročně uloží 3% svého ročního příjmu (salary), nejvýše však 10000, a roční úroková míra je 4%. 78 Úkoly 6. Vytvořte tabulku retire1 (pomocí data stepu a array) z tabulky z bodu 5, ve které budou poslední tři sloupce vyjadřovat potenciální měsíční výplatu penze po dobu pěti let po ukončení spoření. Následně ji vypište (proc sql) s vhodnými názvy (label) sloupců. 79 Úkoly 7. Z tabulky Customerorders vypište CustomerID, datum prvního nákupu (příslušející k danému CustomerID), datum posledního nákupu (příslušející k danému CustomerID) a počet dnů mezi těmito daty (tabulku vhodně setřiďte, pak použijte first. a last.). Výstup seřaďte sestupně podle zjištěného rozdílu mezi daty nákupu. 80 Cvičení 7 Vrací dekadický logaritmus argumentu. Odstraní mezery na začátcích a koncích zadaných řetězců a vrátí jejich spojení do jednoho řetězce (související funkce: CAT, CATT a CATX). Více na: 81 SAS functions nad CALL routiens http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000245910.htm http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002256540.htm LOG10(argument) CATS(string-1 <, …, string-n>) Any of the following statements may be used to change the order of variables in the program data vector: ATTRIB, ARRAY, FORMAT, INFORMAT, LENGTH, and RETAIN. Např. Více na: 82 Změna pořadí sloupců http://www.repole.com/dinosaur/ http://www.repole.com/dinosaur/reordervars.html http://analytics.ncsu.edu/sesug/2002/PS12.pdf data dm1.annual_orders1; retain customer_ID mesic1-mesic12; set dm1.annual_orders; run; 83 Úkoly 1. Předpokládejte, že je prosinec roku 2001. Máte za úkol určit roční bonus zaměstnanců (tabulka USemps). Za každý započatý rok přísluší zaměstnanci $50, nejvýše však $500. Služebně nejstarší zaměstnanci každého oddělení (EmployeeDepartment) dostanou navíc $100. 84 Úkoly 2. Vytvořte tabulku z tabulky Cars, ve které vzniknou nové sloupce obsahující počet cifer všech numerických sloupců tabulky Cars (pomocí data stepu s využitím „array“ a „do“ cyklu, počet cifer je spodní celá část dekadického logaritmu +1). 85 Úkoly 3. Vytvořte tabulky, které vzniknou z tabulek UScustomers a USnewcustomers : a) Spojením (concatenation) b) Proložením (interleaving) c) Setříděním tab. z bodu a). Výsledky porovnejte. 4. Vytvořte tabulky, které vzniknou z tabulek Customerorders a Customers: a) Sloučením (merge) přes CustomerID b) Sloučením (merge) přes CustomerID tak, aby výsledná tabulka obsahovala jen klienty, kteří učinili nějaký nákup. Výsledky porovnejte. 86 Úkoly 5. Z tabulky Employee_donations vytvořte tabulku obsahující sloupec Employee_ID, sloupec obsahující kvartál darů a sloupec obsahující finanční výši darů (nejprve pomocí array, pak pomocí transpose). 6. Z tabulky Order_summary vytvořte tabulku obsahující sloupec customer_ID a sloupce (s vhodnými názvy) obsahující výši nákupů/objednávek v jednotlivých měsících v roce (pomocí transpose). 87 Úkoly 7. Z tabulky Customerorders vytvořte tabulku obsahující sloupec CustomerID a sloupce (s vhodnými názvy) vyjadřující měsíc nákupu (relativně vzhledem k datu prvního nákupu každého zákazníka, tj. den prvního nákupu a vše ve stejný kalendářní měsíc = OrderMonth01, následující kalendářní měsíc = OrderMonth02, a tak dále) a obsahující celkovou výši nákupů v jednotlivých měsících. 88 Cvičení 8 89 Úkoly 1. Z údajů v tabulce Sales, pro které název pozice (job_title) obsahuje řetězec „Rep“, vytvořte html/pdf/rtf obsahující kontingenční tabulku sloupců pohlaví (gender) a stát (country). Nastavte vhodný nadpis a potlačte výpis datumu. (PROC FREQ) 2. Vytvořte tabulku Sales1 z tabulky Sales, ve které vznikne nový sloupec hire_age představující věk zaměstnance v okamžiku nástupu do zaměstnání. Vytvořte formát HireAge, který agreguje zadaný sloupec do kategorií low-<20, 20-<25 a 25high. Následně vytvořte frekvenční tabulku pro sloupec hire_age formátovaný pomocí HireAge. (PROC FREQ) 90 Úkoly 3. Z tabulky Sales1 z úkolu 2 a) vypište průměr (mean) a rozsah (range) příjmu (salary) pro všechny trojice hodnot sloupců pohlaví (gender), stát (country) a hire_age formátovaného pomocí HireAge z úkolu 2. (PROC MEANS) b) uložte výstup procedury (bez specifikace ukládaných údajů) do tabulky a porovnejte výstup bodu a) a b). 91 Úkoly 4. Z tabulky Sales1 z úkolu 2 vytvořte kontingenční tabulku s absolutními četnostmi a řádkově a sloupcově podmíněnými relativními četnostmi. Řádková dimenze bude tvořena kartézským součinem hodnot sloupce hire_age formátovaného pomocí HireAge (včetně souhrnu (all)) a hodnot sloupce country. Sloupcová dimenze bude tvořena hodnotami sloupce gender. (PROC TABULATE) 92 Úkoly 5. Z tabulky Sales1 z úkolu 2 vytvořte kontingenční tabulku, která bude obsahovat minimum, medián a maximum příjmu (salary). Řádková dimenze bude tvořena kartézským součinem hodnot sloupce hire_age formátovaného pomocí HireAge a hodnot sloupce country. Sloupcová dimenze bude tvořena hodnotami sloupce gender. U řádkové i sloupcové dimenze včetně všech souhrnů („all“). To vše ve formátu pdf se stylem sasweb. (PROC TABULATE) 93 Úkoly 6. Analyzujte (zajímá nás základní sada popisných statistik, test pro charakteristiku polohy, kvantily, odlehlá pozorování) sloupec salary z tabulky Sales. Vytvořte výstup ve formátu rtf se stylem sasweb. (PROC UNIVARIATE) Moments N 165 Sum Weights 165 Mean 31160.1212 Sum Observations 5141420 Std Deviation 20082.6671 Variance 403313519 Skewness 8.16761992 Kurtosis 78.5622611 Uncorrected SS 2.26351E11 Corrected SS 6.61434E10 Coeff Variation 64.4499006 Std Error Mean 1563.43352 Basic Statistical Measures Location Variability Mean 31160.12 Std Deviation 20083 Median 27425.00 Variance 403313519 Mode 26600.00 Range 220480 Interquartile Range 2825 Tests for Location: Mu0=0 Test Statistic p Value Student's t t 19.93057 Pr > |t| <.0001 Sign M 82.5 Pr >= |M| <.0001 Signed Rank S 6847.5 Pr >= |S| <.0001 Quantiles (Definition 5) Quantile Estimate 100% Max 243190 99% 108255 95% 32985 90% 31750 75% Q3 29385 50% Median 27425 25% Q1 26560 10% 25965 5% 25680 1% 25110 0% Min 22710 Extreme Observations Lowest Highest Value Obs Value Obs 22710 131 84260 165 25110 111 87975 2 25125 104 95090 163 25185 49 108255 1 25275 50 243190 64 94 Cvičení 9  Nejprve je potřeba otevřít projekt (vytvořit nový). Práce v SAS EM  Namapujeme knihovnu s daty. …  Namapujeme knihovnu s daty.  Vytvoříme datový zdroj. …  Vytvoříme datový zdroj. …  Vytvoříme datový zdroj. …  Vytvoříme datový zdroj.  lze definovat role, datové typy,…  lze vytvořit náhodný výběr z dat. …  Vytvoříme datový zdroj.  Vytvoříme diagram.  A můžeme začít vytvářet procesní tok.  Prvním krokem je vložení dat (přetažením z datových zdrojů). 105 Detaily k řešení úkolů najdete v Helpu nebo např. na: http://www2.sas.com/proceedings/forum2007/163-2007.pdf http://support.sas.com/documentation/cdl/en/graphref/63022/HTML/default/vie wer.htm#legendchap.htm http://www2.stat.unibo.it/manualisas/gref/c06.pdf http://www.nesug.org/proceedings/nesug08/np/np05.pdf http://support.sas.com/sassamples/graphgallery/PROC_GMAP.html http://support.sas.com/documentation/cdl/en/graphref/63022/HTML/default/vie wer.htm#a000729027.htm 106 1. Z údajů v tabulce Sales1 (cviční 8, úkol 2), vytvořte bodový graf závislosti hire_age na birth_date s rozlišením pohlaví (gender). Graf doplňte o regresní přímky a upravte vzhled podle vzoru (PROC GPLOT)… formát x-ové osy mmddyy10., tloušťka reg. přímek = 5, font popisu os i legendy = (arial bold, výška 12 bodů, resp. 10 bodů u „regression lines“), font hodnot na osách a hodnot v legendě= (arial bold, výška 10 bodů), výška nadpisu = 12 bodů. 107 2. Z údajů v tabulce Sashelp.workers vytvořte graf počtu elektrikářů (electric) a počtu zedníků (masonry) v čase(date). Upravte vzhled podle vzoru (PROC GPLOT s overlay)… formát x-ové osy mmddyy10., tloušťka křivek = 5, font popisu os = (arial bold, výška 12 bodů), font hodnot na osách a hodnot v legendě= (arial bold, výška 10 bodů), výška nadpisu = 12 bodů, offset legendy = 1%. 108 3. Z údajů v tabulce Customers vytvořte koláčový 3D graf relativního zastoupení typů zákazníků (customertype). Upravte vzhled podle vzoru (PROC GCHART)… výška hodot v grafu =12 bodů, font hodnot v legendě= (arial bold, výška 10 bodů), font nadpisu v legendě= (arial bold, výška 10 bodů), offset legendy = 1%. 109 4. Z údajů v tabulce sashelp.zipcode a s využitím tabulky maps.us, vytvořte kartodiagram zobrazující počet zip kódů v jednotlivých státech USA. Barevnost sloupců uvažujte v 5-ti úrovních (levels=5) a výšku sloupce zobrazte relativně k nulovému počtu, ne k minimálnímu (relzero). (PROC GMAP). 110 5. Z údajů v tabulce czdata a s využitím tabulky czkraj_map, vytvořte kartodiagram/kartogram zobrazující: a) počet psč kódů v jednotlivých obcích ČR b) počet psč kódů v jednotlivých krajích ČR c) součet ploch obcí v jednotlivých krajích ČR. Barevnost sloupců uvažujte v 5-ti úrovních (levels=5) a výšku sloupce zobrazte relativně k nulovému počtu, ne k minimálnímu (relzero). (PROC GMAP). 111 5. V SAS EM vytvořte projekt, načtete tabulku accepts.sas7bdat. Vytvořte histogram pro věk (age) vs. Bad30 (pomocí MultiPlot), graf zobrazující relativní zastoupení pohlaví (sex) pro varianty hodnot Bad30 (pomocí StatExplore). Dále vytvořte tabulku (pomocí StatExplore – Cross-Tabulation) pro pohlaví*kategorie věku dle vzoru. 112 Cvičení 10 113 1. Vygenerujte data pro cvičení pomocí gen_data_reg.sas. Následně pro tabulku fitness vytvořte pdf report (použijte style=journal) obsahující, mimo jiné, korelační koeficienty sloupce Oxygen_Consumption se všemi ostatními číselnými sloupci seřazené v absolutní hodnotě od největšího po nejmenší. Současně vytvořte bodové grafy závislosti Oxygen_Consumption na všech ostatních číselných proměnných. Nadpis (title) nastavte např. na „ Correlations and Scatter Plots with Oxygen_Consumption“ (PROC CORR). 114 2. Vytvořte html report (style=statistical) obsahující korelační matici všech číselných proměnných tabulky fitness, mimo Oxygen_Consumption , (včetně p-hodnot testu nulovosti korelačních koeficientů) a matici bodových grafů s histogramy na diagonále (PROC CORR). 115 3. Vytvořte regresní model popisující závislost Oxygen_Consumption na RunTime v tabulce finess. Vykreslete všechny grafy poskytující prostředí ods graphics (PROC REG). 3b. Vypište 100(1-α)% konfidenční limity pro jednotlivé predikované hodnoty a pro očekávané hodnoty závisle proměnné. 116 4. Vytvořte tabulku Need_Predictions obsahující hodnoty 9 až 13. Spojte tuto tabulku s tabulkou fitness. Nad takto vzniklou tabulkou vytvořte regresní model popisující závislost Oxygen_Consumption na RunTime. Výstup má obsahovat, mimo jiné, predikovanou hodnotu a proměnnou RunTime (PROC REG). 4b. Vytvořte stejný model nad tabulkou fitness s tím, že regresní koeficienty uložíte do tabulky Betas. Následně, pomocí procedury SCORE, proveďte predikci pro hodnoty tabulky Need_Predictions a výsledek vypište (PROC SCORE). 117 5. Vytvořte regresní model nad tabulkou fitness popisující závislost proměnné oxygen_consumption na proměnných Performance, RunTime, Age, Weight, Run_Pulse, Rest_Pulse a Maximum_Pulse tak, že uvážíte všechny možné kombinace vysvětlovaných proměnných. 118 6. Vytvořte regresní model nad tabulkou fitness popisující závislost proměnné oxygen_consumption na proměnných Performance, RunTime, Age, Weight, Run_Pulse, Rest_Pulse a Maximum_Pulse tak, že postupně použijete metodu forward, backward a stepwise. Výsledky porovnejte. 119 Cvičení 11 120 Detaily k řešení úkolů najdete v Helpu nebo např. na: http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer. htm#statug_logistic_sect004.htm  http://www.math.wpi.edu/saspdf/stat/chap39.pdf  http://www.ats.ucla.edu/stat/sas/seminars/sas_logistic/logistic1.htm 121 1. Vygenerujte data pro cvičení pomocí gen_data_reg.sas (stačí tabulka sales). Pomocí data stepu vytvořte z tabulky sales tabulku sales_inc, ve které vznikne nový sloupec IncLevel překódováním hodnot sloupce Income (Low=1, Medium=2, High=3). Následně z hodnot tabulky sales_inc vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnné Age. (PROC LOGISTIC). • Pravděpodobnost jaké hodnoty proměnné Purchase jste modelovali? • Bylo splněno konvergenční kriterium pro odhad koeficientů? • Jaká je hodnota koeficientů? • Jaká je jejich statistická významnost? • Jaká je kvalita modelu (Somers’D)? 122 2. Tentokrát vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnné Age, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘1’. Navíc vykreslete ROC křivku. (PROC LOGISTIC). • Jak se změnily koeficienty? • Jak se změnily ostatní údaje popisující model? 123 3. Vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnné Gender, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘1’. Navíc vykreslete ROC křivku a přidejte výpis konfidenčního intervalu pro poměr šancí (PROC LOGISTIC). • Jaké jsou koeficienty modelu? 124 4. Vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnné Gender, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘1’. Ponechte kódování typu effect, ale za referenční hodnotu nastavte ‘Female’. Navíc vykreslete ROC křivku a přidejte výpis konfidenčního intervalu pro poměr šancí (PROC LOGISTIC). • Co se změnilo oproti př. 3 (designová matice, koeficienty, Somers’D, ROC,…)? 125 5. Vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnných Gender, Income a Age, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘1’. Změnte kódování klasifikačních proměnných na typ reference a za referenční hodnoty nastavte ‘Male’ a ‘Low’. Navíc vykreslete ROC křivku a ‘EffectPlot’. Model vytvořte pomocí backward metody. Vypište korelační matici (PROC LOGISTIC). 126 6. Vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnných Gender, Income a Age, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘1’. Změnte kódování klasifikačních proměnných na typ reference a za referenční hodnoty nastavte ‘Male’ a ‘Low’. Do modelu zahrňte také všechny interakce proměnných do druhého řádu. Navíc vykreslete ROC křivku a ‘EffectPlot’. Model vytvořte pomocí backward metody. Vypište detaily týkající se všech kroků výpočtu (opt. details) (PROC LOGISTIC). 127 Cvičení 12 128 1. Použijte tabulku sales_inc z minulého cvičení. Vytvořte logistický model vysvětlující proměnnou Purchase pomocí proměnných Gender, Income a Age, s tím že modelovaná bude pravděpodobnost pro hodnotu ‘0’. Změnte kódování klasifikačních proměnných na typ reference a za referenční hodnoty nastavte ‘Male’ a ‘Low’. Vykreslete ROC křivku a ‘EffectPlot’. Model vytvořte pomocí backward metody. Vypište korelační matici (PROC LOGISTIC). Dále zjistěte hodnotu KS statistiky a vykreslete empirické distribuční funkce získaného skóre pro hodnoty proměnné Purchase (PROC NPAR1WAY). Nakonec vypište tabulku s hodnotami absolutního a kumulativního Liftu pro decily skóre a vykreslete příslušný graf. 129 130