1 / 14

Technical Club 11.9.2013

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

Download Presentation

Technical Club 11.9.2013

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. BASE SAS Classics. Proc transpose, Proc summary, Proc formats ovat Markon suosikkiproceduureja. Mikä on sinun suosikkiproceduurisi? Marko Kivelä Arvotieto Oy www.arvotieto.fi

  3. 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.

  4. …asiaan. “Agenda: • Proc FORMATS • Proc TRANSPOSE • Proc SUMMARY & Proc PRINT • Proc CONTENTS • %macro • Retain • Call symput Lopuksi, jos ehditään: • “Kaikki by Kaikki”

  5. 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;

  6. 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

  7. 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;

  8. 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

  9. 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

  10. 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ä...

  11. PROC CONTENTS / DATAOHJATTU KOODI Mitä se tarkoittaa ? Tutkitaanhakemistondatatjaniidensisältö • kirjoitetaan METADATA • ohjataanmakrojaMETADATAlla...

  12. 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;

  13. Lopuksi (pikaisesti) läpikäydäänesimerkkiohjelmia • KAIKKI BY KAIKKI –MAKRO • Löytyy ARVOTIETO - SAS PUB:sta • http://www.arvotieto.fi/Pages/SASPUB.aspx

  14. 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 !

More Related