140 likes | 259 Views
Technical Club 11.9.2013. 14.05 – 14.35 BASE SAS Classics. Marko Kivelä, Arvotieto Oy Proc transpose , Proc summary, Proc formats ovat Markon suosikkiproceduureja . Mikä on sinun suosikkiproceduurisi ? 14.35 – 14.50 Kahvitauko
E N D
Technical Club 11.9.2013 • 14.05 – 14.35 BASE SAS Classics. Marko Kivelä, Arvotieto OyProc transpose, Proc summary, Proc formats ovat Markon suosikkiproceduureja. Mikä on sinun suosikkiproceduurisi? • 14.35 – 14.50 Kahvitauko • 14.50 – 15.25 The Little SAS Book – erityisesti ODS näkökulma. Eliisa Löyttyniemi, Turun YliopistoMitä mielenkiintoista kokenut SAS -osaaja Eliisa, löysi Little SAS Bookista tänä vuonna? • 15.25 – 16.00 BASE SAS => SAS EG, lääkkeitä muutosvastarintaan. Jussi Varjus, VarjusConsultingJussilla on nippu vinkkejä, joiden avulla kokenut Base SAS koodari pystyy helpoimmin jatkamaan eloaan SAS EG -ympäristössä. • 16.00 Tilaisuus päättyy
BASE SAS Classics. Proc transpose, Proc summary, Proc formats ovat Markon suosikkiproceduureja. Mikä on sinun suosikkiproceduurisi? Marko Kivelä Arvotieto Oy www.arvotieto.fi
Otsikkovoisisiis olla “Best of the 70’s” • Joillekinkuulijoillevarmastiperuskamaa - kaikilleeiehkäkuitenkaan. Kohderyhmänä: • Aloittelevatanalyytikot (SAS –ympäristössä) • Kokeneet SAS –tekijät, jotkaoppineethommatEG:n tai DI –studion (tms.) kautta.
…asiaan. “Agenda: • Proc FORMATS • Proc TRANSPOSE • Proc SUMMARY & Proc PRINT • Proc CONTENTS • %macro • Retain • Call symput Lopuksi, jos ehditään: • “Kaikki by Kaikki”
PROC TRANSPOSE Vaan näin: procsortdata=b out=c; by product; run; proctransposedata=c out=d (rename=(_name_=var1)); by product; var actual; id month; run; Ei näin: data c_JAN (keep=product VAR1 JAN); set b; if month=‘JAN’ then do; VAR1=‘Actual’; JAN=actual; end; run; data c_FEB (keep=product VAR1 FEB); set b; if month=‘FEB’ then do; VAR1=‘Actual’; FEB=actual; end; run; Product Month Actual A JAN 5 A FEB 6 B FEB 7 Product VAR1 JAN FEB A Actual 5 6 B Actual 7 procsortdata=c_JAN; by product VAR1; run; procsortdata=c_FEB; by product VAR1; run; data D; merge C_JAN C_FEB; by product VAR1; run;
PROC TRANSPOSE Kun tarvitsen datan toisessa “muodossa”. Hahmottaa, millaisessa muodossa datan oikeastaan loppujen lopuksi haluaa... • Milloin tarvitsen tätä ? • Mikä on hankalaa ? • Mikä on helppoa ? • Miten/miksi vältän transponoinnin + Kun tietää mitkä muuttujat “jäävät paikalleen” => ne ovat “by muuttujia”. + Skaalautuvuus. IF…THEN -kovakoodilla saa saman lopputuloksen
Tai: Luodaan dataset (work.f_city_t), muotoa Ja tämän jälkeen Proc format library=work cntlin=f_city_t; Run; PROC FORMATS Vaan näin: proc format; value citytype ‘A’=‘Kaupunki’ ‘B’=‘Kunta’ other=‘Other’; run; Ei näin: data a; length var2 $12.; set a; if citytype=’A’ then var2=‘Kaupunki’; if citytype=’B’ then var2=‘Kunta’; run; proc summary data=a; var n; class var2; output sum=; run; proc summary data=a; var n; class citytype; output sum=; format citytype $citytype.; run;
PROC FORMATS Luokittelu, uudelleenryhmittely/-nimeäminen, ... • Milloin tarvitsen tätä ? • Mikä on hankalaa ? • Mikä on helppoa ? • Miten/miksi vältän tekemästä näin... Laaja kokonaisuus, C/S, catalogien hallinta, sisällön seuranta/tarkistus +Suoritusteho +Vähentää (toistettavaa) koodia If…then… => isommat datat
PROC SUMMARY output & data -step=> PROC PRINT Esim: procsummarydata=origdata.prdsale (keep=country actual predict) nway; class country; var actual predict; outputout=a (drop=_type_ _freq_) sum=; run; data b; set a; ero=actual-predict; pct=100*(actual/predict); run; procprintdata=b; by country; id country; sum actual predict ero; run; OUTPUT: COUNTRY ACTUAL PREDICT ero pct CANADA $246,990.00 $233,019.00 13971 105.996 GERMANY $245,998.00 $231,554.00 14444 106.238 U.S.A. $237,349.00 $241,722.00 -4373 98.191 ============ ============ ====== $730,337.00 $706,295.00 24042
PROC SUMMARY & PROC PRINT Raportti, jossa summatasoille johdettuja muuttujia - esim. %-muutos tms. Ei hankalaa - jos osaa Summary:n + Data-vaiheen + PRINT:t …PROC REPORTS on hankala. • Milloin tarvitsen tätä ? • Mikä on hankalaa ? • Mikä on helppoa ? • Miten/miksi vältän tekemästä näin... Perusvälineiden (SUMMARY:n output) hyödyntäminen. PROC REPORTS tai PROC TABULATE. Tai muu järjestelmä...
PROC CONTENTS / DATAOHJATTU KOODI Mitä se tarkoittaa ? Tutkitaanhakemistondatatjaniidensisältö • kirjoitetaan METADATA • ohjataanmakrojaMETADATAlla...
PROC CONTENTS / dataohjattukoODi /* ======================================= */ %MACRO DATA_CONTE (START=1,END=&MAX_N); %DO i=&START %TO &END; data _null_; set METADATA.DATASETS_&LIBNAME; where n=&i; call symput('DATA_C',MEMNAME); run; %PUT DATA:&DATA_C; PROC CONTENTS DATA=&LIBNAME..&DATA_C. OUT=METADATA.CONTE_&DATA_C. (KEEP=LIBNAME MEMNAME NAME TYPE FORMAT NOBS) NOPRINT; RUN; /* DIM1 MÄÄRITYS - eli luokittelevat muuttujat */ data CHAR (keep=name); set metadata.CONTE_&DATA_C; where type=2; run; data CHAR; length COL $200; retain COL; set CHAR; if _N_=1 then COL=trim(left(NAME)); else COL=trim(left(COL))||' '||trim(left(NAME)); call symput('DIM1',COL); run; %PUT LUOKITTELEVAT MUUTTUJAT:&DIM1; /* ANALYSIS MÄÄRITYS - eli numeeriset muuttujat */ data NUM (keep=name); set metadata.CONTE_&DATA_C; where type=1; run; data NUM; length COL $200; retain COL; set NUM; if _N_=1 then COL=trim(left(NAME)); else COL=trim(left(COL))||' '||trim(left(NAME)); call symput('ANALYS',COL); run; %PUT NUMEERISET MUUTTUJAT:&ANALYS; %END; %mend DATA_CONTE; Esimerkki: %LET LIBNAME=ORIGDATA; %PUT TUTKITTAVA SAS-HAKEMISTO:&libname; PROCCONTENTSDATA=&LIBNAME.._ALL_ OUT=METADATA.CONTE_&LIBNAME (KEEP=LIBNAME MEMNAME NAME TYPE FORMAT NOBS) NOPRINT; RUN; /* MITÄ DATOJA HAKEMISTOSSA ON */ PROCSORTDATA=METADATA.CONTE_&LIBNAME (KEEP=MEMNAME) OUT=METADATA.DATASETS_&LIBNAME NODUPKEY; BY MEMNAME; RUN; data METADATA.DATASETS_&LIBNAME; retain n; set METADATA.DATASETS_&LIBNAME; if _N_=1then n=0; n=n+1; run; /* TUTKITAAN DATOJEN LUKUMÄÄRÄ */ procsummarydata=METADATA.DATASETS_&LIBNAME nway; var n; outputout=DATA_N (keep=max_N) max=max_N; run; data_null_; set DATA_N; call symput('max_N',max_N); run; %PUT MAX_N:&MAX_N;
Lopuksi (pikaisesti) läpikäydäänesimerkkiohjelmia • KAIKKI BY KAIKKI –MAKRO • Löytyy ARVOTIETO - SAS PUB:sta • http://www.arvotieto.fi/Pages/SASPUB.aspx
Kolmeasiaa, jotkamuistaa: • Datankääntämisessäproc transpose • Kannattaaopetella. Oltavatarkkana. • Peukkusääntö: “BY –muuttujatpysyy” • Proc formats korvaakovakoodaamisen • Vaatiiyhteisiätoimintatapoja • Data-ohjattuformatointi ! • Pikkukikat: • Retain • Data –ohjattukoodi Do –loopilla. • Local macro –parametrit KIITOS !