PROC TRANSPOSE SAS-tabellen - hensigtsmæssig lagring af data Copyright 2011 SAS Institute Inc. All rights reserved.
Transponerede tabeller Brede eller smalle? Hvad: Brede tabeller har mange kolonner med nøgletal Smalle tabeller har få kolonner med nøgletal angivet i en indekseret kolonne Hvorfor: Brede tabeller kan være praktiske, når man har brug for at beregne på tværs af kolonner, fx i DATA STEP Smalle tabeller optimerer performance ift. SASprocedurer med anvendelse af BY såvel som CLASS og WHERE 2
Fra bred til smal tabel Med PROC TRANSPOSE Anvender tabellen SASHELP.CLASS Tilføjer kolonnen column_name, som får værdien Value Transponerer værdierne Age, Height og Weight proc transpose data=work.class out=work.transposed_class name=type id column_name by Name Sex var Age Height Weight run 3
Fra smal til bred tabel Med PROC TRANSPOSE Transponerer tilbage til bredt format Sammenligner, og data er identiske med udtagelse af label på column_name proc transpose data=work.transposed_class out=work.wide_data (rename=(_name_=value)) name=column_name id Type by Name Sex var Value run 4
PROC TRANSPOSE Andre options og statements Options: label - benytter kolonnenavne fra datasæt let - tillader dubletter i de transponerede værdier prefix - foranstående tekst på kolonner suffix - endelse på de transponerede kolonnenavne Statements: copy - kopierer værdi direkte idlabel - transponerer label fra smal til bred 5
Anvendelse af smalle tabeller Eksempler på procedurer som anvender BY statement CHART og PLOT COMPARE MEANS / SUMMARY SORT PRINT REPORT TABULATE UNIVARIATE og mange flere 6
Anvendelse af smalle tabeller Eksempel med PROC SUMMARY proc summary data=work.transposed_class PROC SUMMARY arbejder kolonnebaseret og anvender BY statement. Indeks defineres først. proc datasets library=work nolist nodetails modify transposed_class index create type / nomiss quit output by var run out=work.summary_table (drop=_type FREQ_) min=min max=max mean=mean var=var type value 7
Anvendelse af smalle tabeller Anvendelse af WHERE statement De førnævnte procedurer kan også benyttes sammen med WHERE statement WHERE er ligeledes anvendeligt i DATA STEP Med smalle tabeller kan man ved anvendelse af BY og WHERE reducere mængden af data, der læses fra disken Smalle tabeller reducerer tillige antallet af kolonner, og dermed den samlede rækkelængde Forklaring følger 8
Indlæsning af data I/O performance KEEP= eller DROP= forhindrer ikke indlæsningen af hele rækken i PDV en fra disken kun indlæsningen i hukommelsen 9
Indlæsning af data I/O performance Anvendes indeks på tabellen, kan læsning foregå med BY statement eller KEY= option via RANDOM ACCESS. POINT= kræver ikke indeks. Reducer den indlæste datamængde: Fjern unødvendige kolonner og begræns længde på variable Reducer BUFSIZE= mest muligt således, at Data Set Page Size reduceres tilsvarende Herved indlæses flest mulige rækker i mindst mulige klumper 10
Det brede vs. smalle datasæt PROC CONTENTS Oprindelig Ikke optimeret Optimeret Observations 2.664 111.888 111.888 Variable 44 5 4 Indices 0 2 2 Observation Length 352 96 56 Data Set Page Size 16.384 8.192 2.048 Number of Data Set Pages 60 1.334 3.110 First Data Page 1 1 1 Max Obs per Page 46 84 36 11
I/O Performance Hvad har vi opnået? Det er ikke længere nødvendigt at læse hele tabellen, fx proc print data=sashelp.class where type='height' run Optimerer vi datasættet yderligere, kan de ønskede informationer ligge i måske bare én eller ganske få Data Set Pages Hvad er den bredeste tabel du anvender? 12
SAS Data Integration Studio Transformationen Transpose SAS Data Integration Studio indeholder en god omfangsrig transformation til at transponere data. Den findes under Transformations => Data => Transpose Tilsæt en table loader og definer indeks på det endelige datasæt Herefter kan tabellen anvendes fx til analytiske formål med WHERE subsetting eller BY statement 13
Mere om PROC TRANSPOSE Henvisninger Grundlæggende indføring Paper 060-2009: Learn the Basics of PROC TRANSPOSE af Zirbel, Douglas http://support.sas.com/resources/papers/proceedings09/060-2009.pdf Dybere gennemgang Paper 033-2009: A Row Is a Row Is a Row, or Is It? Get Comfortable with Transposing Your Data af Williams, Christianna http://support.sas.com/resources/papers/proceedings09/033-2009.pdf I/O performance og optimeringsteknikker Programmering 3-kursus her på SAS Forum eller 4. juli på Købmagergade (3 dage) 14
Claus Ørskov, konsulent, SAS Institute A/S Claus.oerskov@sdk.sas.com Copyright 2011 SAS Institute Inc. All rights reserved.