Tips og tricks til Proc Means. Per Andersen Senior IM Consultant Dong Energy, Group IT, Trading IT, Analytics



Relaterede dokumenter
Tips og tricks til Proc Means. Per Andersen

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved.

Appelsiner, bananer og citroner

Deltag i en quiz: Test din viden i SAS -programmering

Hvorfor SAS Kort intro til SAS

Hvordan bygger vi en havvindmøllepark - sikkert. Bygherrens forventninger til entreprenøren - med eksempler fra Anholt havvindmøllepark.

Kort intro til SAS. Efterår Janne Petersen Judith L Jacobsen Lene Theil Skovgaard

%kfhashmerge(main, flows, crsp_fundno pdate, flowval mtna lagmtna, main);

Sikkerhed gennem linjen -et projekt om sikkerhedskultur og transformationsledelse Senior Director, Group QHSE Per Kampp, DONG Energy

Generalforsamling. April Generalforsamling. Temaer som back-up

En Introduktion til SAS. Kapitel 5.

SPSS introduktion Om at komme igang 1

SAS formater i Danmarks Statistik

Introduktion til SAS macro language

Peter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik

Projekt DATA step view

ØVELSE 2B. Formål Det primære formål med denne øvelse er at prøve nogle vigtige procedurer til statistisk og grafisk analyse.

ODS measured tagset til RTF er smart og kan tilpasses

k normalfordelte observationsrækker (ensidet variansanalyse)

Lineær regression i SAS. Lineær regression i SAS p.1/20

PUT og INPUT funktionerne

Kommentarer til øvelser i basalkursus, 2. uge

DONG Energy OPEN TEXT Streamserve

High-Performance Data Mining med SAS Enterprise Miner 14.1

Måske kender du nogle af de tips og tricks, guiden indeholder, men så bliver du blot bekræftet i, at du gør det rigtige.

Sortering fra A-Z. Henrik Dorf Chefkonsulent SAS Institute

Præsentation og praktisk anvendelse af PROC GLMSELECT

Dan dine egne SAS - funktioner med PROC FCMP

Velkommen SAS Forum 2010

VÆR EFFEKTIV SOM SAS PROGRAMMØR MED SAS ENTERPRISE GUIDE 7.12 GEORG MORSING

Opgave 1 Basal select med (stjerne)

Mænd, Mus og Metadata

Variansanalyse i SAS. Institut for Matematiske Fag December 2007

MPH specialmodul i epidemiologi og biostatistik. SAS. Introduktion til SAS. Eksempel: Blodtryk og fedme

Moderne SAS-programmering på webben med SAS Studio. Georg Morsing SAS Institute

1. Basal select med (stjerne)

Løsning til opgave i logistisk regression

Introduktion til SQL queries

Økonometri 1 Efterår 2006 Ugeseddel 11

Registre i medicinsk forskning. Frank Mehnert SAS Forum København 3. oktober 2012

Man indlæser en såkaldt frequency-table i SAS ved følgende kommandoer:

Variansanalyse i SAS 1. Institut for Matematiske Fag December 2007

SAS systemet SAS. SAS vinduer Janne Petersen

3. SPSS Output. Descriptives. [DataSet1] C:\Users\Thomas\Desktop\Eservice_i_produktgruppen_Bekldning.sav

Reeksamen i Statistik for Biokemikere 6. april 2009

Import af rekursivt (parent-child) hierarki i Palo

Økonometri 1 Forår 2006 Ugeseddel 11

Afdeling for Anvendt Matematik og Statistik December 2006

SAS forum maj Gas portefølje optimering i Energy Markets

Fra SAS/Intrnet til Portalløsning

HP LaserJet Pro M102w Laser

Spørgeskemaundersøgelse i Lynæs Havn - Kryds af udvalgte variable.

Træningsaktiviteter dag 3

Lineær og logistisk regression

Decentral forecasting/ planlægning i et callcenter

Nye krav om energimærkning

Introduktion til SAS. Faculty of Health Sciences

VA 7.4 Tips og Tricks. Torben Skov

Det kunne godt se ud til at ikke-rygere er ældre. Spredningen ser ud til at være nogenlunde ens i de to grupper.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

CAS CL5200j. Step by step: Køb og opsætning. Side 1 / 10

Køn. Holdning Mænd Kvinder Ialt JA NEJ VED IKKE

First Time Right hos Dong Energy. Jesper Lunde Thomas Thimsen

Guide til cmo.grexel.com Register for bionaturgascertifikater

Husk Nummerering af afsnit. Navn og gruppe mv. skal fremgå af header på alle sider.

En Introduktion til SAS

Anders Milhøj. Hurtigt i gang med statistiske og økonometriske procedurer i SAS

Statistik. Introduktion Deskriptiv statistik Sandsynslighedregning

Dynamiske Web-applikationer i SAS-portalen

HSE krav til leverandører og underleverandører til DONG Energys Offshore byggepladser

Øvelser i epidemiologi og biostatistik, 6. april 2010 Baseline-informationer fra Ebeltoft datasættet Eksempel på besvarelse

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Uniq.Survey-Xact.DK. Vejledning. Rambøll Management Olof Palmes Allé 20 DK-8200 Århus N Denmark. Tlf:

SPSS appendix SPSS APPENDIX. Box plots. Indlæsning. Faculty of Health Sciences. Basal Statistik: Sammenligning af grupper, Variansanalyse

Faculty of Health Sciences. SPSS appendix. Basal Statistik: Sammenligning af grupper, Variansanalyse. Lene Theil Skovgaard. 22.

SPSS appendix SPSS APPENDIX. Box plots. Indlæsning. Faculty of Health Sciences. Basal Statistik: Sammenligning af grupper, Variansanalyse

Værktøjer, der kan regne på LAR-elementer

Sporbarhed og Rapportering i Quality Center. Kim Stenbo Nielsen NNIT Application Management Services

Regressionsanalyse i SAS

Selskabsmeddelelse. Stabiliseringsperiode begynder. Nr. 21/2016

Eksamen i Statistik for Biokemikere, Blok januar 2009

ANHOLT Havmøllepark. 21. april Jens Nybo Jensen

fn8&feature=related

Kursus i varians- og regressionsanalyse Data med detektionsgrænse. Birthe Lykke Thomsen H. Lundbeck A/S

Postoperative komplikationer

Anvendelse af Model- View koncept i SAS Stored Processer

Data lagring. 2. iteration (implement backend)

Foderplanlægning Svin - et modul i FMS

Opgavebesvarelse, logistisk regression

Reeksamen i Statistik for biokemikere. Blok

Faculty of Health Sciences. Basal Statistik. Begreber. Parrede sammenligninger. Lene Theil Skovgaard. 6. september 2016

Fossilfri energi Hvad er den fremtidige udfordring?

Hvordan eksporterer jeg skemadata fra Untis til WebUntis?

Datafri analyse ved simulation SAS Analytics Netværk 19. november 2008 Indhold

Database "opbygning"

GRØN OMSTILLING I DONG ENERGY

Eksamen i Statistik for biokemikere. Blok

Dynamic Voltage and Frequency Management Based on Variable Update Intervals

FORGRENINGSLOGIK OG CALCULATED FIELDS. Opsætning af forgreningslogik Felttypen Calculated field

Transkript:

Tips og tricks til Proc Means Per Andersen Senior IM Consultant Dong Energy, Group IT, Trading IT, Analytics

ENERGI I FORANDRING Marts 2012

DONG Energy er en af Nordeuropas førende energikoncerner med hovedsæde i Danmark Vores forretning er baseret på at fremskaffe, producere, distribuere og handle energi og tilknyttede produkter i Nordeuropa. Vi beskæftiger omkring 6.000 medarbejdere og omsatte for 57 mia. kr. (EUR 7,6 mia.) i 2011. EXPLORATION & PRODUCTION WIND POWER THERMAL POWER ENERGY MARKETS SALES & DISTRIBUTION 3

Omsætning og resultater i 2011 Omsætningen udgjorde 56,8 mia. kr. i 2011 mod 54,6 mia. kr. i 2010. Stigningen på 4% skyldtes højere produktion af olie og gas samt højere energipriser. EBITDA udgjorde 13,8 mia. kr. i 2011 mod 14,1 mia. kr. i 2010. Et fald på 3%. Årets resultat udgjorde 2,9 mia. kr. og var 1,6 mia. kr. lavere end i 2010. Faldet skyldtes især lavere avance ved salg af virksomheder og højere skat i Norge.

Tips og tricks til Proc Means Ideen til dette indlæg har jeg fra Andrew H. Karp Sierra Information Services Inc. California US Andrew holdt et tilsvarende indlæg på SUGI 27 (2002) og SAS Global Forum 2007 5

Tips og tricks til Proc Means Denne præsentation vil vise 13 (forhåbentlige) gode tips til Proc Means (kan også bruges i Proc Summary). Mange af de viste tips indeholder V8/V9 features i Proc Means Denne præsentation vil: vise hvordan det er muligt at: Reducere antal gange Proc Means skal kører Benytte endnu flere analyse værdier Tilføj mere output information Reducere processing overhead med Proc Means og store datamængder 6

Tips og tricks til Proc Means Proc Means og Proc Summary Begge procedure er en del af Base SAS software Blev i SAS V6 ens procedurer (det er lang tid siden (1991)) Er begge meget effektfulde til at summere og analysere data Forskel: Proc Means danner SAS output (default) Proc Summary danner SAS-dataset (default) 7

Syntax: MEANS Procedure PROC MEANS <option(s)> <statistic-keyword(s)>; BY <DESCENDING> variable-1 < <DESCENDING> variable-n><notsorted>; CLASS variable(s) </ option(s)>; FREQ variable; ID variable(s); OUTPUT <OUT=SAS-data-set> <output-statistic-specification(s)> <id-group-specification(s)> <maximum-id-specification(s)> <minimum-id-specification(s)> </ option(s)> ; TYPES request(s); VAR variable(s) < / WEIGHT=weight-variable>; WAYS list; WEIGHT variable; 8

Tips og tricks til Proc Means Eksempel data Kundedata 227.362 rækker Mulige klassifikationsvariable Postnr (503 unikke værdier) Salgskontor (3 unikke værdier) Grossist (38 unikke værdier) Kundetype (3 unikke værdier) Koen (2 unikke værdier) Region (1 unik værdi) 9

Tips og tricks til Proc Means Eksempel data Mulige analysevariable antal Pris_ialt enhpris 10

Tips og tricks til Proc Means Simpelt eksempel Beregn sum på Antal Pris_ialt Pr. Salgskontor grossist 11

Tips og tricks til Proc Means title1 "Simpel eksempel på brug af Proc Means"; Proc Means data=sugdk.kundedata2 noprint missing; class salgskontor grossist; var antal pris_ialt; output out=ny sum=total_ant total_pris; run; proc print data=ny; run; Bemærk længere kolonnenavne (nyt i V8) 12

Tips og tricks til Proc Means Simpel eksempel på brug af Proc Means Obs salgskontor grossist _TYPE FREQ_ total_ant total_pris 1 0 227362 244.190.840 17.575.580.941,96 2 1 41470 36.677.704 2.047.815.352,91 3 02 1 3361 3.781.584 286.442.916,86 4 03 1 2228 2.919.052 230.607.268,69 5 07 1 9511 6.247.742 308.320.483,88 6 10 1 367 388.230 26.073.099,12 7 14 1 1046 1.235.458 89.382.530,87 8 15 1 42990 37.882.250 2.219.534.949,87 9 17 1 13394 16.049.759 1.191.245.931,35 10 18 1 1354 1.331.341 93.629.917,89 11 21 1 7697 10.308.929 803.214.017,47 12 24 1 6165 6.452.709 469.047.449,30 13 34 1 2781 2.715.126 188.555.412,51 Type = 0 total niveau Type = 1 ialt pr. grossist Der er også type = 2 og 3 13

Tips og tricks til Proc Means Hvad skete der? Der blev dannet et SAS dataset i work med summer indenfor de analysevariable der var angivet i CLASS-statementet. Der bliver dannet 2 variable fra PROC MEANS _type_ angiver summeringsniveau _freq_ antal rækker der er summeret i dette summeringsniveau 14

Tip #1 Benyt Proc Means til at beregne Quantiler Proc Means kan nu også beregne Quantiler Percentiler Median m.m. Det betyder at du er fri for at benytte Proc Univariate til dette Proc Tabulate og Proc Report har også disse muligheder 15

Tip #1 Benyt Proc Means til at beregne Quantiler Beregn sum på Pris_ialt Pr. grossist 16

Tip #1 Benyt Proc Means til at beregne Quantiler title; title1 "Tip 1, Benyt Proc Means til at beregne Quantiler"; Proc Means data=sugdk.kundedata2 noprint missing; class grossist; var pris_ialt; output out=ny2 sum=median_pris mean=total_pris p50=mean_pris; run; proc print data=ny2; run; 17

Tip #1 Benyt Proc Means til at beregne Quantiler Tip 1, Benyt Proc Means til at beregne Quantiler Obs grossist _TYPE FREQ_ median_pris total_pris mean_pris 1 0 227362 17.575.580.941,96 77.302,19 5.248,80 2 1 41470 2.047.815.352,91 49.380,65 5.141,82 3 02 1 3361 286.442.916,86 85.225,50 4.681,80 4 03 1 2228 230.607.268,69 103.504,16 6.949,00 5 07 1 9511 308.320.483,88 32.417,25 1.851,93 6 10 1 367 26.073.099,12 71.043,87 6.771,20 7 14 1 1046 89.382.530,87 85.451,75 6.507,64 8 15 1 42990 2.219.534.949,87 51.629,10 3.382,72 9 17 1 13394 1.191.245.931,35 88.938,77 7.162,58 10 18 1 1354 93.629.917,89 69.150,60 4.292,87 11 21 1 7697 803.214.017,47 104.354,17 8.294,40 12 24 1 6165 469.047.449,30 76.082,31 4.884,22 Hvad er der galt med dette dataset? Pga. tastaturproblemer er der angivet forkerte kolonnenavne 18

Tip #2 Autoname og Autolabel En metode til at undgå fejlagtige kolonnenavne er at benytte Autoname og Autolabel options. Disse options hører til Output statement og giver automatisk kolonnenavne der indeholder det oprindelige kolonnenavn + oplysning om hvilken statistik der er benyttet. 19

Tip #2 Autoname og Autolabel title1 "Tip 2, Brug AUTONAME og AUTOLABEL options"; Proc Means data=sugdk.kundedata2 noprint missing; label pris_ialt = 'Total pris'; class grossist; var pris_ialt; output out=ny3 sum= mean= p50= /autolabel autoname; run; 20

Tip #2 Autoname og Autolabel Tip 2, Brug AUTONAME og AUTOLABEL options Obs grossist _TYPE FREQ_ pris_ialt_sum pris_ialt_mean pris_ialt_p50 1 0 227362 17.575.580.941,96 77.302,19 5.248,80 2 1 41470 2.047.815.352,91 49.380,65 5.141,82 3 02 1 3361 286.442.916,86 85.225,50 4.681,80 4 03 1 2228 230.607.268,69 103.504,16 6.949,00 5 07 1 9511 308.320.483,88 32.417,25 1.851,93 6 10 1 367 26.073.099,12 71.043,87 6.771,20 7 14 1 1046 89.382.530,87 85.451,75 6.507,64 8 15 1 42990 2.219.534.949,87 51.629,10 3.382,72 9 17 1 13394 1.191.245.931,35 88.938,77 7.162,58 10 18 1 1354 93.629.917,89 69.150,60 4.292,87 11 21 1 7697 803.214.017,47 104.354,17 8.294,40 12 24 1 6165 469.047.449,30 76.082,31 4.884,22 21

Tip #2 Autoname og Autolabel proc contents data=ny3 noprint out=ny4 (keep=name label); run; proc print data=ny4; run; proc print data=ny3 l; run; 22

Tip #2 output fra PROC CONTENTS Tip 2, Brug AUTONAME og AUTOLABEL options Obs NAME LABEL 1 _FREQ_ 2 _TYPE_ 3 grossist Grossist 4 pris_ialt_mean Total pris_mean 5 pris_ialt_p50 Total pris_p50 6 pris_ialt_sum Total pris_sum 23

Tip #2, output fra Proc Print Tip 2, Brug AUTONAME og AUTOLABEL options Obs Grossist _TYPE FREQ_ Total pris_sum Total pris_mean Total pris_p50 1 0 227362 17.575.580.941,96 77.302,19 5.248,80 2 1 41470 2.047.815.352,91 49.380,65 5.141,82 3 02 1 3361 286.442.916,86 85.225,50 4.681,80 4 03 1 2228 230.607.268,69 103.504,16 6.949,00 5 07 1 9511 308.320.483,88 32.417,25 1.851,93 6 10 1 367 26.073.099,12 71.043,87 6.771,20 7 14 1 1046 89.382.530,87 85.451,75 6.507,64 8 15 1 42990 2.219.534.949,87 51.629,10 3.382,72 9 17 1 13394 1.191.245.931,35 88.938,77 7.162,58 10 18 1 1354 93.629.917,89 69.150,60 4.292,87 11 21 1 7697 803.214.017,47 104.354,17 8.294,40 12 24 1 6165 469.047.449,30 76.082,31 4.884,22 24

Tip #3 Dan flere output dataset i en PROC MEANS En metode der ofte er overset, men meget effektfuld Proc Means skal kun køres 1 gang Der er mulighed for at benytte _type_ til at styre output Værdien i _type_ svarer til det binære talsystem 25

Tip #3 Dan flere output dataset i en PROC MEANS title1 "Tip 3, Dan flere output dataset i en Proc Means"; Proc Means data=sugdk.kundedata2 noprint missing; class postnr salgskontor grossist kundetype; var antal pris_ialt; output out=tip3 sum=; run; Outputdataset indeholder 16.842 kolonner Her er 4 class-kolonner, giver _type_ fra 0 til 15, eller binært 0000 til 1111 26

Tip #3 Dan flere output dataset i en PROC MEANS I version 6 var der mulighed for at bruge where på _type_ i outputstatement Og senere mulighed for at benytte bit-testing f.eks where _type_ = 1001 b; (9) 27

Tip #3, binære værdier på _type_ 0000 = grandtotal 0001 = pr. kundetype 0010 = pr. grossist 0011 = grossist og kundetype 0100 = pr. salgskontor 0101 = salgskontor og kundetype 0110 = salgskontor og grossist 0111 = salgskontor, grossist og kundetype 1000 = pr. postnr 1001 = postnr og kundetype 1010 = postnr og grossist 1011 = postnr, grossist og kundetype 1100 = postnr og salgskontor 1101 = postnr, salgskontor og kundetype 1110 = postnr, salgskontor og grossist 1111 = alle kombinationer 28

Tip #3 Dan flere output dataset i en PROC MEANS data testtyp9; set tip3; where _type_=9; run; * eller ; data testtyp9a; set tip3; if _type_='1001'b; /* bemærk at where ikke kan benyttes med BIT expression */ run; 29

Tip #3 Dan flere output dataset i en PROC MEANS Eller direkte i PROC MEANS Proc Means data=sugdk.kundedata2 noprint missing; class postnr salgskontor grossist kundetype; var antal pris_ialt; output out=tip3a sum=; output out=tip3b(where=(_type_ = 9)) sum=; run; Her bliver der dannet flere output dataset Kan dette løses med Proc SQL? 30

Tip #3 Dan flere output dataset i en PROC MEANS I version 8 er der kommer en ny option CHARTYPE. Her bliver den numeriske værdi at _type_ ændret til karakterkolonne med binære værdier (0 eller 1) 31

Tip #3 Dan flere output dataset i en PROC MEANS Proc Means data=sugdk.kundedata2 noprint chartype missing; class postnr salgskontor grossist kundetype; var antal pris_ialt; output out=tip3c sum=; output out=tip3d (where=(_type_ = '1001')) sum=; run; 32

Tip #3 Dan flere output dataset i en PROC MEANS Proc Means data=sugdk.kundedata2 noprint chartype missing; class postnr salgskontor grossist kundetype; var antal pris_ialt; output out=tip3e sum=; output out=tip3f(where=(_type_ in('0000','1001'))) sum=; run; 33

Tip #4 Brug DESCENDTYPES Proc Means sorterer efter _type_ i stigende orden Med options DESCENDTYPES kommer outputtet i faldende orden efter _type_, dvs, grandtotal kommer til sidst. 34

Tip #4 Brug DESCENDTYPES title1 "Tip 4, Brug descendingtypes"; Proc Means data=sugdk.kundedata2 noprint descendtypes missing; class grossist kundetype; var antal pris_ialt; output out=tip4 sum=; run; proc print data=tip4; run; 35

Tip #4 Brug DESCENDTYPES 84 62 10 2265 2.468.200 181.810.312,81 85 67 10 2263 3.571.814 366.372.484,32 86 72 10 2737 3.730.721 308.677.783,37 87 73 10 14123 16.720.898 1.335.244.601,97 88 76 10 496 542.618 23.716.175,04 89 77 10 159 235.817 21.043.513,15 90 81 10 3294 3.364.326 206.759.553,54 91 82 10 1261 1.642.204 141.717.459,57 92 83 10 2004 2.985.943 285.086.627,14 93 86 10 1735 2.320.620 189.384.940,00 94 88 10 1375 1.875.553 173.310.194,31 95 90 10 234 228.115 13.396.213,86 96 91 10 2012 2.806.402 244.162.387,64 97 92 10 7902 10.053.114 862.025.962,58 98 93 10 372 387.480 19.771.046,25 99 94 10 4545 6.518.325 610.846.775,40 100 95 10 1829 2.717.730 265.600.349,81 101 96 10 912 1.113.660 90.060.062,61 102 98 10 835 1.023.052 84.733.144,29 103 D 01 4240 7.683.521 819.938.404,89 104 H 01 181652 199.829.615 14.707.827.184,16 105 I 01 41470 36.677.704 2.047.815.352,91 106 00 227362 244.190.840 17.575.580.941,96 36

Tip #5 Brug TYPES statement til at begrænse kombination af CLASS TYPES Statement er nyt, må ikke forveksles med _type_. TYPES bruges til angivelse af kombinationer af CLASS variable Bruges især når der er mange CLASS variable 37

Tip #5 Brug TYPES statement til at begrænse kombination af CLASS Eksempel: class postnr salgskontor grossist kundetype; Følgende kombinationer ønskes: Grandtotal (_type_ = 0) Grossist * kundetype (_type_ = 3) postnr * salgskontor (_type_ = 12) postnr * salgskontor * grossist (_type_ = 14) Dette kan løses på følgende måde 38

Tip #5 Brug TYPES statement til at begrænse kombination af CLASS title1 "Tip 5, Brug TYPES Statement til at begrænse class-kombination"; Proc Means data=sugdk.kundedata2 noprint missing; class postnr salgskontor grossist kundetype; types () /* giver grandtotal */ grossist * kundetype postnr * salgskontor postnr * salgskontor * grossist; var antal pris_ialt; output out=tip5 sum=; run; 39

Tip #5 Brug TYPES statement til at begrænse kombination af CLASS Tip 5, Brug TYPES Statement til at begrænse class-kombination The FREQ Procedure Cumulative Cumulative _TYPE_ Frequency Percent Frequency Percent ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 0 1 0.02 1 0.02 3 64 1.40 65 1.43 12 831 18.24 896 19.67 14 3660 80.33 4556 100.00 40

Tip #6 Brug DESCENDING og CLASS DESCENDING sorterer i faldende orden på _type_ Class variablerne indenfor hver _type_ kommer i stigende orden 41

Tip #6 Brug DESCENDING og CLASS options nocenter nodate; title1 "Tip 6, Brug DESCENDING og CLASS"; Proc Means data=sugdk.kundedata2 noprint descending missing; class postnr salgskontor grossist kundetype; types () grossist * kundetype postnr * salgskontor postnr * salgskontor * grossist; var antal pris_ialt; output out=tip6 sum=; run; 42

Tip #6 Brug DESCENDING og CLASS Tip 6, Brug DESCENDING og CLASS The FREQ Procedure Cumulative Cumulative _TYPE_ Frequency Percent Frequency Percent ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 0 1 0.02 1 0.02 3 64 1.40 65 1.43 12 831 18.24 896 19.67 14 3660 80.33 4556 100.00 43

Tip #7 Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet Ny option til OUTPUT statementet Kombinerer ID og IDMIN options i PROC MEANS statement og MAXID/MINID options i OUTPUT statement. OUT [n] options controllerer antal extremer der ønskes pr. række 44

Tip #7 Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet Opgave: Lav analyse i faldende orden på salgskontor og Stigende orden på kundetype Beregn mean og sum Find de 2 største og 2 mindste værdier af antal Output til SAS-tabel 45

Tip #7 Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet options nocenter nodate; title1 "Tip 7, Brug IDGROUP til at danne rækker med"; title2 "Extreme værdier fra input datasettet"; Proc Means data=sugdk.kundedata2 noprint missing; class salgskontor/descending; class kundetype; var startdato; output out=tip7 idgroup (max(startdato) out[2] (startdato)= maxstdato) idgroup (min(startdato) out[2] (startdato)= minstdato) sum= mean= /autoname; run; 46

Tip #7 Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet Tip 7, Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet S S t t a s m m m m a r a a a i i r t l k x x n n t d g u s s s s d a s n t t t t a t k d d d d d t o o e T F a a a a o _ n t Y R t t t t _ M O t y P E o o o o S e b o p E Q u a s r e 1 2 1 2 m n 1 0 227362 2009-03-27 2009-03-27 1995-07-25 1995-07-27 ********** 2004-05-25 2 D 1 4240 2009-03-27 2009-03-27 1996-01-30 1996-01-30 ********** 2005-01-06 3 H 1 181652 2009-03-27 2009-03-27 1995-07-25 1995-07-27 ********** 2004-06-15 4 I 1 41470 2009-03-27 2009-03-27 1995-08-17 1995-08-29 ********** 2004-02-03 5 02002 2 97379 2009-03-27 2009-03-27 1995-07-25 1995-07-27 ********** 2004-03-22 6 02001 2 24906 2009-03-27 2009-03-27 1995-08-17 1995-09-19 ********** 2004-09-09 7 02000 2 105077 2009-03-27 2009-03-27 1996-01-30 1996-01-30 ********** 2004-06-28 8 02002 D 3 1671 2009-03-27 2009-03-27 1996-01-30 1996-01-30 ********** 2004-11-22 9 02002 H 3 78677 2009-03-27 2009-03-27 1995-07-25 1995-07-27 ********** 2004-03-29 10 02002 I 3 17031 2009-03-26 2009-03-26 1995-08-29 1995-09-08 ********** 2004-01-31 11 02001 D 3 439 2009-03-27 2009-03-24 1996-02-01 1996-02-01 ********** 2005-04-01 12 02001 H 3 17932 2009-03-27 2009-03-27 1995-09-19 1996-01-30 ********** 2004-10-17 13 02001 I 3 6535 2009-03-26 2009-03-26 1995-08-17 1996-01-30 ********** 2004-05-13 14 02000 D 3 2130 2009-03-27 2009-03-26 1996-01-30 1996-02-21 ********** 2005-01-23 15 02000 H 3 85043 2009-03-27 2009-03-27 1996-01-30 1996-01-30 ********** 2004-07-30 47 16 02000 I 3 17904 2009-03-27 2009-03-27 1996-01-30 1996-01-30 ********** 2004-01-01

Tip #7 Brug IDGROUP til at danne rækker med Extreme værdier fra input datasettet Som I kan se i outputtet Er der 2 værdier på max/min pr. række 48

Tip #8 Brug PRELOADFMT og COMPLETETYPES Formater bliver knyttet til Class-variable efter Proc Means har beregnet analysen. Hvis der ingen værdier er til et formatværdi, bliver der ikke dannet en række 49

Tip #8 Brug PRELOADFMT og COMPLETETYPES PRELOADFMT options placeres på CLASS statementet, og fortæller PROC MEANS at formatet skal i memory før analysen. COMPLETETYPES i PROC MEANS statement, sørger for at alle værdier i formatet vises, selv om der ikke data til rækken. 50

Tip #8 Brug PRELOADFMT og COMPLETETYPES title1 "Tip 8, Preloadfmt og Completetypes"; proc format; value $salgskontor '02000' = '02000 Roskilde' '02001' = '02001 Greve' '02002' = '02002 Køge' '02003' = '02003 Solrød' '02004' = '02004 Havdrup' ; 51

Tip #8 Brug PRELOADFMT og COMPLETETYPES Proc Means data=sugdk.kundedata2 noprint missing; class salgskontor/preloadfmt; var antal ; format salgskontor $salgskontor.; output out=tip8 sum= mean= /autoname; run; proc print data=tip8; run; 52

Tip #8 Brug PRELOADFMT og COMPLETETYPES Tip 8, Preloadfmt og Completetypes Obs salgskontor _TYPE FREQ_ antal_sum antal_mean 1 0 227362 244.190.840 1.074 2 02000 Roskilde 1 105077 114.964.367 1.094 3 02001 Greve 1 24906 25.278.340 1.015 4 02002 Køge 1 97379 103.948.133 1.067 53

Tip #8 Brug PRELOADFMT og COMPLETETYPES Der var 5 værdier i formatet, men der bliver kun vist de 3 værdier der var data til. PROC MEANS sorterer de viste rækker efter format-værdierne. Brug PRELOADFMT og COMPLETETYPES til at vise alle værdier, vi kan også ændre præsentationsrækkefølgen ved at bruge ORDER= options. 54

Tip #8 Brug PRELOADFMT og COMPLETETYPES title1 "Tip 8, Preloadfmt og Completetypes"; proc format; value $salgskontora '02000' = 'Roskilde' '02001' = 'Greve' '02002' = 'Køge' '02003' = 'Solrød' '02004' = 'Havdrup' ; 55

Tip #8 Brug PRELOADFMT og COMPLETETYPES Proc Means data=sugdk.kundedata2 noprint completetypes missing; class salgskontor/preloadfmt order=freq; var antal ; format salgskontor $salgskontora.; output out=tip8a sum= mean= /autoname; run; proc print data=tip8a; run; 56

Tip #8 Brug PRELOADFMT og COMPLETETYPES Tip 8, Preloadfmt og Completetypes Obs salgskontor _TYPE FREQ_ antal_sum antal_mean 1 0 227362 244.190.840 1.074 2 Roskilde 1 105077 114.964.367 1.094 3 Køge 1 97379 103.948.133 1.067 4 Greve 1 24906 25.278.340 1.015 5 Solrød 1 0.. 6 Havdrup 1 0.. 57

Tip #9 Brug Ways statement Ways statement kan give dig Besparelse i kodetid Besparelse i processor tid Forskellige kombinationsmuligheder på CLASS-variable Ways 3 giver alle 3-way kombinationer Ways 2 giver alle 2-way kombinationer Ways 2 3 giver alle 2- og 3-ways kombinationer Ways 1 giver alle 1-way kombinationer 58

Tip #9 Brug Ways statement options nocenter nodate; title1 "Tip 9, Brug WAYS"; Proc Means data=sugdk.kundedata2 noprint missing; class postnr salgskontor grossist kundetype; ways 3; var antal pris_ialt; output out=tip9 sum=; run; proc freq data=tip9; tables _type_; run; 59

Tip #9 Brug Ways statement Tip 9, Brug WAYS The FREQ Procedure Cumulative Cumulative _TYPE_ Frequency Percent Frequency Percent ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 7 177 2.23 177 2.23 11 2887 36.45 3064 38.69 13 1196 15.10 4260 53.79 14 3660 46.21 7920 100.00 60

Tip #10 Brug Multilabel format Multilabel Format Ny feature i Proc Format Overlab på formater Kan bruges i Means/Summary/Tabulate/Report procedurerne MLF option i CLASS statement skal benyttes 61

Tip #10 Brug Multilabel format options nocenter nodate; title "Tip #10 Multilabel format"; proc format; value $postnra (multilabel) 0001-4999 = 'København/Sjælland' 5000-5999 = 'Fyn' 6000-9999 = 'Jylland' ; value $postnrb (multilabel) 0001-4999 = 'København/Sjælland' 5000-5999 = 'Fyn' 6000-9999 = 'Jylland' 3700-3799 = 'Bornholm'; run; 62

Tip #10 Brug Multilabel format proc means data=sugdk.kundedata2 noprint completetypes nway missing; class postnr/preloadfmt MLF order=formatted; var antal; output out=tip10 sum=; format postnr $postnra.; run; proc print data=tip10; run; 63

Tip #10 Brug Multilabel format Tip #10 Multilabel format Obs Postnr _TYPE FREQ_ antal 1 Fyn 1 230 222.117 2 Jylland 1 2237 1.805.372 3 København/Sjælland 1 224895 242.163.351 64

Tip #10 Brug Multilabel format proc means data=sugdk.kundedata2 noprint completetypes nway; class postnr/preloadfmt MLF order=formatted; var antal; output out=tip10b sum=; format postnr $postnrb.; run; proc print data=tip10b; run; 65

Tip #10 Brug Multilabel format Tip #10 Multilabel format Obs Postnr _TYPE FREQ_ antal 1 Bornholm 1 62 55.280 2 Fyn 1 230 222.117 3 Jylland 1 2237 1.805.372 4 København/Sjælland 1 224895 242.163.351 66

Tip #11 Brug Class Dataset Næsten sidste eksempel og ny facilitet CLASSDATA dataset I et CLASSDATA dataset er der mulighed for at have alle sine analyseværdier, disse værdier vil så komme med i output, selv om der ingen rækker er i analysedatasettet 67

Tip #11 Brug Class Dataset data salgskontor; length salgskontor $5; input salgskontor; cards; 02000 02001 02002 02003 02004 ; run; 68

Tip #11 Brug Class Dataset options nocenter nodate; title1 "Tip 11, Brug CLASSDATA dataset"; proc means data=sugdk.kundedata2 classdata=salgskontor noprint missing; class salgskontor; var antal; output out=tip11 sum=; run; proc print data=tip11; run; 69

Tip #11 Brug Class Dataset Tip 11, Brug CLASSDATA dataset Obs salgskontor _TYPE FREQ_ antal 1 0 227362 244.190.840 2 02000 1 105077 114.964.367 3 02001 1 24906 25.278.340 4 02002 1 97379 103.948.133 5 02003 1 0. 6 02004 1 0. 70

Tip #12 Brug Formater til summering Proc Means (Summary og Tabulate) fungerer rigtig godt sammen med formater. Lav en summation på kundetype og startdato Hvor startdato er på formatet yyq6. Benyt pris_alt som beregningsvariabel 71

Tip #12 Brug Formater til summering title1 "Eksempel 12, brug formater til summering"; proc means data=sugdk.kundedata2 noprint; class kundetype startdato; var pris_ialt; format startdato yyq6.; output out=eks12 sum=/autolabel autoname; run; 72

Tip #12 Brug Formater til summering Eksempel 12, brug formater til summering The FREQ Procedure Cumulative Cumulative _TYPE_ Frequency Percent Frequency Percent ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 0 1 0.46 1 0.46 1 54 24.66 55 25.11 2 3 1.37 58 26.48 3 161 73.52 219 100.00 73

Tip #12 Brug Formater til summering I output datasettet har _type_ 4 forskellige værdier. 0 = grandtotal 1 = total pr. kvartal 2 = total pr. kundetype 3 = total pr. kundetype kvartal Kan SQL generere 1 dataset med disse summeringer? 74

Tip #13 Brug NWAY option Når der summeres på forskellige variabler er det sjældent at alle summeringsniveauer skal med i output. Det kan løses på flere forskellige måder: Types statement Flere output statement (med where) Hvis det er totaler på højeste _type_ niveau der ønskes, kan NWAY option benyttes. 75

Tip #13 Brug NWAY option title1 "Eksempel 13, NWAY option"; proc means data=sugdk.kundedata2 noprint nway; class kundetype startdato; var pris_ialt; format startdato yyq6.; output out=eks13 sum=/autolabel autoname; run; 76

Tip #13 Brug NWAY option Eksempel 13, NWAY option The FREQ Procedure Cumulative Cumulative _TYPE_ Frequency Percent Frequency Percent ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 3 161 100.00 161 100.00 77

Tip #13 Brug NWAY option I output datasettet har _type_ en værdi. 3 = total pr. kundetype kvartal 78

Andre muligheder med Proc Means Where statement kan benyttes Dataset options kan benyttes på input og output Formater kan benyttes, især effektiv på Class-variable Flere output dataset Output bliver sorteret efter class-variablerne, mulighed for at ændre dette Mange statistiske muligheder (31) 79

Lidt om performance Hvis du kan benytte TYPES statement for du den bedste performance Hvis du bruger where _type_ = på output, skal SAS kalkulere alt = dårlig performance 80

Tips og tricks til Proc Means Lær mere: SAS online-doc SAS-kurser Prøv jer frem (hvis I har tid)!! 81

Tips og tricks til Proc Means? 82

Kontakt oplysninger Per Andersen Senior IM Consultant DONG Energy Oil & Gas A/S, Group IT/Trading IT/CMBI&DA Nesa alle 1 2820 Gentofte tlf: +45 99 55 25 90 peand@dongenergy.dk 83