Det gode SAS-program #19: Benyt views og få hurtigere svartid

0

Vi benytter ofte proc og datastep i SAS-programmer til at danne midlertidige work-tabeller.

Her anbefaler  vi:

Dan views i stedet for fysiske work-tabeller, når tabellen kun skal læses 1 gang  

Et SAS view er en logisk SAS-tabel. Data gemmes ikke på disk, men i stedet gemmes det kompilerede SAS-program, som næsten ikke fylder noget uanset datamængden. Vi reducerer altså skrivning til og læsning fra disk, og programmet vil køre hurtigere.

Eksempel 1

SASHELP.HEART indeholder højde og vægt for en række patienter. Da det er amerikanske data, benyttes tommer og pund. Vi ønsker at beregne BMI-tallet for disse patienter og samtidig omforme data til dansk målestandard (cm og kg). Derfor er vi nødt til først at danne en ny work-tabel, hvorefter vi kan lave den ønskede graf over BMI-tallet for alle disse patienter.

Dgs#19.1

Resultatet viser, at de personer, der har et ekstremt høj BMI, har en højde på 150-170 cm, og at det typisk er kvinder. Det er altså ikke så høje kvinder, der har de højeste BMI-værdier i dette studie fra USA.

Løsning

For at udføre dette var vi nødt til at danne en ny SAS-tabel: work.bmi_usa. Det eneste, vi skal bruge denne tabel til, er at danne grafen. Derfor laver vi et view og ikke en fysisk tabel, så data kun læses én gang. Du kan danne et view på 2 måder med enten data step eller proc sql. Nedenfor benytter vi et datastep. Bemærk den røde ramme rundt om den kode, du skal tilføje for at lave et view i stedet for en tabel.

Dgs#19.2

Datasteppet læser INGEN data, men gemmer blot instruktionerne på disk. PROC SGPLOT benytter viewet work.bmi_usa som input: Data læses fra sashelp.heart, programlinjerne udføres, og data afleveres til PROC SGPLOT. Og det hele kører hurtigere, især hvis du benytter meget store datamængder. Har du små datamængder og hurtige svartider, er der selvfølgelig ingen grund til at benytte views.

Nedenfor finder du et link til SAS Community, hvor du kan finde ovenstående program, og hvor du også finder PROC SQL-kode, som gør det samme som data steppet ovenfor.

Eksempel 2

På nedenstående link til SAS Community finder du også et testprogram, der viser den hurtigere svartid. Programmet danner en SAS-tabel med 26 millioner rækker og 18 kolonner. De fleste kolonner er numeriske, og dermed er den en relativt smal tabel med mange rækker.

Vi har udført ovenstående datastep på denne store tabel, dannet et view og en tabel og kørt en PROC FREQ på disse 2 ting. Herunder ses resultaterne:

Målt i sekunder Tabel View
Data step 32 0
PROC FREQ 11 15
I alt 43 15

 

I dette eksempel, som er kørt på min PC, reduceres svartiden med næsten 2/3, når man benytter view i stedet for en tabel. Grunden til det er, at næsten al svartiden går med at flytte data fra disk til hukommelse. Og med et view skal data kun læses 1 gang i stedet for 3 gange læsning/skrivning.

Koden kan du hente på SASCommunity.dk.

Georg

Det gode SAS-program indeholder anbefalinger, der løbende vil blive revideret – giv os gerne feedback, hvis du har forslag til forbedringer.
Share

About Author

Georg Morsing

Education Director

Georg Morsing, SAS Community Senior Manager, har arbejdet med SAS-software siden 1981. Først på Statistisk Kontor i Københavns Kommune og siden 1985 hos SAS Institute. Georg har en bred og dyb erfaring med anvendelse af SAS-software fra stillinger som uddannelseschef, konsulentchef og softwareudviklingschef. Georg har ansvar for faglige netværk og brugerkonferencer i Danmark. Her på bloggen giver han tips og tricks til optimal og effektiv SAS-programmering.

Leave A Reply

Back to Top