Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

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.

Samankaltaiset esitykset


Esitys aiheesta: "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."— Esityksen transkriptio:

1 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 14.50 – 15.25 The Little SAS Book – erityisesti ODS näkökulma. Eliisa Löyttyniemi, Turun Yliopisto Mitä 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, VarjusConsulting Jussilla 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 n Otsikko voisi siis olla “Best of the 70’s” n Joillekin kuulijoille varmasti peruskamaa - kaikille ei ehkä kuitenkaan. Kohderyhmänä: n Aloittelevat analyytikot (SAS –ympäristössä) n Kokeneet SAS –tekijät, jotka oppineet hommat EG:n tai DI –studion (tms.) kautta.

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

5 Product Month Actual A JAN5 AFEB6 BFEB7 ProductVAR1JANFEB AActual56 BActual7 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; PROC TRANSPOSE Vaan näin: proc sort data=b out=c; by product; run; proc transpose data=c out=d (rename=(_name_=var1)); by product; var actual; id month; run; proc sort data=c_JAN; by product VAR1; run; proc sort data=c_FEB; by product VAR1; run; data D; merge C_JAN C_FEB; by product VAR1; run;

6 n Milloin tarvitsen tätä ? n Mikä on hankalaa ? n Mikä on helppoa ? n Miten/miksi vältän transponoinnin Kun tarvitsen datan toisessa “muodossa”. Hahmottaa, millaisessa muodossa datan oikeastaan loppujen lopuksi haluaa... + Kun tietää mitkä muuttujat “jäävät paikalleen” => ne ovat “by muuttujia”. + Skaalautuvuus. IF…THEN -kovakoodilla saa saman lopputuloksen PROC TRANSPOSE

7 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; Vaan näin: proc format; value citytype ‘A’=‘Kaupunki’ ‘B’=‘Kunta’ other=‘Other’; run; PROC FORMATS Tai: Luodaan dataset (work.f_city_t), muotoa Ja tämän jälkeen Proc format library=work cntlin=f_city_t; Run; startendlabelfmtnameType AAKaupunkiCitytypeC BBKuntaCitytypeC proc summary data=a; var n; class citytype; output sum=; format citytype $citytype.; run;

8 n Milloin tarvitsen tätä ? n Mikä on hankalaa ? n Mikä on helppoa ? n Miten/miksi vältän tekemästä näin... Luokittelu, uudelleenryhmittely/- nimeäminen,... Laaja kokonaisuus, C/S, catalogien hallinta, sisällön seuranta/tarkistus +Suoritusteho +Vähentää (toistettavaa) koodia If…then… => isommat datat PROC FORMATS

9 Esim: proc summary data=origdata.prdsale (keep=country actual predict) nway; class country; var actual predict; output out=a (drop=_type_ _freq_) sum=; run; data b; set a; ero=actual-predict; pct=100*(actual/predict); run; proc print data=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 OUTPUT & DATA -STEP => PROC PRINT

10 n Milloin tarvitsen tätä ? n Mikä on hankalaa ? n Mikä on helppoa ? n Miten/miksi vältän tekemästä näin... 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. Perusvälineiden (SUMMARY:n output) hyödyntäminen. PROC REPORTS tai PROC TABULATE. Tai muu järjestelmä...

11 Mitä se tarkoittaa ? Tutkitaan hakemiston datat ja niiden sisältö n kirjoitetaan METADATA n ohjataan makroja METADATAlla... PROC CONTENTS / DATAOHJATTU KOODI

12 Esimerkki: %LET LIBNAME=ORIGDATA; %PUT TUTKITTAVA SAS-HAKEMISTO:&libname; PROC CONTENTS DATA=&LIBNAME.._ALL_ OUT=METADATA.CONTE_&LIBNAME (KEEP=LIBNAME MEMNAME NAME TYPE FORMAT NOBS) NOPRINT; RUN; /* MITÄ DATOJA HAKEMISTOSSA ON */ PROC SORT DATA=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_=1 then n=0; n=n+1; run; /* TUTKITAAN DATOJEN LUKUMÄÄRÄ */ proc summary data=METADATA.DATASETS_&LIBNAME nway; var n; output out=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; /* ======================================= */ %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; PROC CONTENTS / DATAOHJATTU KOODI

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

14 Kolme asiaa, jotka muistaa: n Datan kääntämisessä proc transpose n Kannattaa opetella. Oltava tarkkana. n Peukkusääntö: “BY –muuttujat pysyy” n Proc formats korvaa kovakoodaamisen n Vaatii yhteisiä toimintatapoja n Data-ohjattu formatointi ! n Pikkukikat: n Retain n Data –ohjattu koodi Do –loopilla. n Local macro –parametrit KIITOS !


Lataa ppt "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."

Samankaltaiset esitykset


Iklan oleh Google