Avanceret grafik med Base SAS, ODS Graphics Designer og GTL - Graph Template Language Nu med SAS programmerne sidst i dokumentet.



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

Hvorfor SAS Kort intro til SAS

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

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

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

ODS measured tagset til RTF er smart og kan tilpasses

Tips og tricks til Proc Means. Per Andersen

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

Appelsiner, bananer og citroner

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

Klog på SAS seminar, december 2013 Hvordan skjules password i loggen ved brug af macro, Svend Bang, Københavns Universitet

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

Anvendelse af Model- View koncept i SAS Stored Processer

SPSS introduktion Om at komme igang 1

SAS systemet SAS. SAS vinduer Janne Petersen

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

Hurtigt i gang med SAS University Edition Anders Milhøj

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

Kursuskalender Savner du et kursus på listen, er du meget velkommen til at kontakte os på mail:

Google Maps og SAS/GRAPH software

Indledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.

Workshop G4 MicroStation V8 XM edtion nye værktøjer 2

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

Dynamiske Web-applikationer i SAS-portalen

3 Tilføj printer "HP-GL/2 devices, ADI for Autodesk by HP" 5 Klik "Printer ikonet" - Print/Plot configuration

Statistik FSV 4. semester 2014 Øvelser Uge 2: 11. februar

Introduktion til SPSS

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

StarWars-videointro. Start din video på den nørdede måde! Version: August 2012

High-Performance Data Mining med SAS Enterprise Miner 14.1

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

Introduktion til SAS macro language

Variansanalyse i SAS. Institut for Matematiske Fag December 2007

SAS formater i Danmarks Statistik

En Introduktion til SAS. Kapitel 5.

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

Det. Bind. Journal of. Citations. Impact Factor. Articles. Books. Patents

Brugervejledning til Design Manager Version 1.02

Program dag 2 (11. april 2011)

Workshop G8 Tasks og Templates

Praktisk information Tilmelding Du tilmelder dig telefonisk på eller på:

q-værdien som skal sammenlignes med den kritiske Chi-i-Anden værdi p-værdien som skal sammenlignes med signifikansniveauet.

Stilarter, rapporter, m.m.

Projekt DATA step view

Tillykke Med Fødselsdagen

PUT og INPUT funktionerne

Den Danske Esri Brugerkonference 2019 Nyheder I ArcGIS Online

Start af nyt schematic projekt i Quartus II

Indholdsfortegnelse PSpice modul 3. Forudsætninger. Forberedelse til øvelser

Løsning til øvelsesopgaver dag 4 spg 5-9

Basal Statistik - SPSS

Kommentarer til øvelser i basalkursus, 2. uge

Crime Profiler v2.0 Nyheder. Februar 2012

Tech College Aalborg. ASP.NET Hjemmeside. Projekt Smart Zenior Home - Guide til ASP.NET hjemmeside med Visual Studio

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

Fang Prikkerne. Introduktion. Scratch

Before you begin...2. Part 1: Document Setup...3. Part 2: Master Pages Part 3: Page Numbering...5. Part 4: Texts and Frames...

Programmering I Java/C#

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

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Indhold. Jennie Mathiasen. Google Drev

Shortcuts til Photoshop CS2

Vurdering af billedmanipulation Opgave 1

ASB signatur. ASB signatur. Vejledning til opsætning af signatur IKT - Februar 2008

INTRODUKTION TIL dele af SAS

Sortering fra A-Z. Henrik Dorf Chefkonsulent SAS Institute

Opgavebesvarelse, korrelerede målinger

Afdeling for Anvendt Matematik og Statistik Januar Regressionsanalyse i SAS 2. Regressionsanalyse med GLM Sammenligning af regressionslinier

Statistik FSV 4. semester 2014 Holdundervisning Uge 1: 4. februar Introduktion til Stata

Øvelser til basalkursus, 2. uge

Mænd, Mus og Metadata

Undervisningsbeskrivelse

Basal Statistik - SPSS

Programmering C RTG

Statistiske Modeller 1: Kontingenstabeller i SAS

Guide til, hvordan du tilføjer en GIPPLER- fane til din Facebook side

how to save excel as pdf

Kort introduktion til SAS

Statistik (deskriptiv)

Hvad er en terminalserver?

5 ARBEJDE MED EDITOREN

Database for udviklere. Jan Lund Madsen PBS10107

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

Velkommen til manualen for Styleclasses Introduktion til Styleclasses Rediger styleclass

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

Easy Guide i GallupPC

Programmeringseksempel til CX/IPC

PICTURE formater. Klog på SAS 15. marts 2012

QUICK START Updated:

GMID Guide. UCN Biblioteket, Porthusgade, Bente Thorup Andersen 16. marts 2012, Opdateret 17. Oktober 2014 af Anders Damsgaard

MicroStation V8i Print

Deep Learning og Computer Vision. C h r i s H o l m b e r g B a h n s e n

Efterlyst! Introduktion HTML & CSS. I dette projekt skal du lære, hvordan du laver din egen plakat. Arbejdsliste. Test dit Projekt.

RESPONSE INSIGHT HURTIG BRUGERMANUAL 2018 ASPEKT R&D A/S VERSION JANUAR 2018

Opret en formular i Dreamweaver

Den danske Esri Brugerkonference 2018 Nyheder i ArcGIS Online - i året der gik

Articles... 3 I gang med Adobe Connect... 4 Når du skal invitere deltagere til et Adobe Connect møderum...11 Sådan redigerer du en video optaget i

TMC Forum Plot Arne Mortensen

Transkript:

Avanceret grafik med Base SAS, ODS Graphics Designer og GTL - Graph Template Language Nu med SAS programmerne sidst i dokumentet. Steen Vestergaard, Chefkonsulent, SAS Institute A/S, Public dept. Opdateret 8. oktober 2012 Indholdsfortegnelse Avanceret grafik med Base SAS, ODS Graphics Designer og GTL - Graph Template Language Nu med SAS programmerne sidst i dokumentet....1 Introduktion til ODS Graphics...2 Hvorfor fik vi ODS Graphics...2 Hvad er ODS Graphics...2 SAS/GRAPH vs. ODS Graphics...3 De tre nemme metoder til grafik...4 Direkte i procedurer...4 ODS Graphics designer...5 SG-procedurerne...5 Forstå plottyperne i SGPLOT og SGPANEL...6 Et eksempel på SGPANEL:...7 Hvordan skal det se ud og hvor skal det hen...8 ODS og Styles...8 Den lidt mindre nemme metode til grafik...9 Og et par af ODS Graphics-nyhederne i SAS 9.3 i øvrigt:... 13 Mine kilder, hvorfra jeg med dyb taknemlighed har hugget med arme og ben... 15 SAS programmer... 17 Almindelige SAS procedurer, SGplot med mere... 17 Annotate SGanno data sæt... 18 ODS Graphics Template eksempler... 19 Beregninger i Template koden... 20 Befolkningudvikling oversigten... 21 Datagrundlaget for befolkningsoversigten... 22

Introduktion til ODS Graphics Du har hørt om ODS Graphics eller ODS Statistical Graphs, og du har måske spekuleret på, om det har nogen betydning for dig. Du har måske ansvaret for vedligeholdelse og nyudvikling af systemer og rapporter, hvor der er brugt masser af SAS/GRAPH og spekulerer på, om det måske var det rigtige at skifte til de nye ODS Graphics-metoder. Hvorfor fik vi ODS Graphics Der er med Base SAS i SAS 9.3, som ODS Graphics er blevet en del af, blevet åbnet for en række nye muligheder for intelligent rapportering men også for en usikkerhed, hvilken vej der er smartest at følge i fremtiden. For nogle år siden så SAS-udviklerne et par nye trends: Selvom SAS/GRAPH var stærkt og fleksibelt, var det at producere en del almindelige typer statistiske grafer ret kompliceret. Først skulle en statistisk procedure beregne parametre og statistikker og skrive dem ud i et SAS-datasæt for derefter at bruge en SAS/GRAPHprocedure til at danne den ønskede grafik. De fleste SAS/GRAPH-brugere sendte ikke længere deres output direkte til en plotter eller printer, som SAS/GRAPH oprindelig var blevet udviklet til at gøre på utallige måder. I stedet for ønskede de at danne enten dokumenter (HTML, PDF eller lign.) indeholdende grafer eller billedfiler (JPEG, WMF eller lign.), som de kunne placere i eksisterende dokumenter. Det var for at dække dette behov, at ODS Graphics blev udviklet. Hvad er ODS Graphics ODS Graphics består af en række komponenter: De fleste SAS/STAT-procedurer og mange statistiske procedurer i øvrigt (fx. FREQ, UNIVARIATE, CORR i Base SAS) har direkte muligheden for at danne grafik simpelthen ved at tænde for ODS Graphics-funktionaliteten. På denne måde elimineres behovet for at danne et datasæt fra den statistiske procedure bare for at kunne bruge data i SAS/GRAPH til at danne grafikken. Tre nye procedurer (SGPLOT, SGPANEL og SGSCATTER) anvendes til at producere en række almindelige typer grafer. ODS Graphics Designer, et peg-og-klik interface til at danne dine egne grafer og SGDESIGN til præsentation af det dannede SGD-projekt. En annotate facilitet til at tilføje yderligere grafiske elementer (linjer, tekst m.m.) til grafikken. Annotate faciliteterne til ODS Graphics er tilgængelige med SAS 9.3. ODS Graphics Editor til at lave ad hoc-engangsændringer i de allerede dannede grafer. Graph Template Language (GTL) er programmeringssproget bag næsten alle komponenter og bruges til at lave de helt individuelle grafiske layouts. SGRENDER-proceduren anvendes til at danne grafikken defineret i GTL.

Alt dette er med SAS 9.3 en del af Base SAS og dermed tilgængeligt for enhver SAS-programmør og bruger. Vælger du: SAS Display Manager og lignende åbne SAS-kode-miljøer kan du fra ODS Graphics Designer gemme almindelig SAS-kode med den TEMPLATE og SGRENDERprocedurekode, der danner din grafik. Kode, der naturligvis kan bygges videre på med de ekstra statements og muligheder, som pt. kun GTL-sproget tilbyder. SAS Enterprise Guide som design- og udviklingsmiljø kan du selvfølgelig kalde ODS Graphics Designer til at definere dine templates og derefter anvende det dannede SGDprojekt i dit EG-flow til datapræsentation. SGD-projekter vil du kun rette i via ODS Graphics Designer; ønsker du SAS-kode i dit EG-projekt, som du kan bygge videre på, må du gemme SAS-koden og bruge den, ligesom du ville gøre i SAS Display Manager. Op imod 80% af den fulde GTL-funktionalitet er indbygget i de tre SG-procedurer SGPLOT, SGSCATTER og SGPANEL indpakket i en enkel syntaks, der gør det let at komme i gang med at producere resultater. SAS/GRAPH vs. ODS Graphics SAS/GRAPH klassiske procedurer Output sendes til GRAPH1 vinduet eller evt. til andre destinationer også ODS-destinationer som HTML, RTF eller PDF Grafen dannes som et GRSEG entry i et SAS catalog GREPLAY-proceduren anvendes til at gendanne grafer gemt i catalogs SAS/GRAPH Annotate facilitet tilgængelig til at tilføje ekstra elementer til eksisterende grafer GOPTIONS statement sætter generelle grafiske options. Mange grafiske attributter er globale og sættes med de globale AXIS, SYMBOL, PATTERN og LEGEND statements PROC GREPLAY anvendes til at placere flere grafer på en side. Meget høj grad af fleksibilitet i kontrollen af udseende PDF-filer har alene embedded grafik, fylder meget ODS Graphics Output sendes til en image file (JPEG, PNG eller lign.) eller inkluderes som en del af et HTML-, RTF- eller PDF-dokument Der dannes ingen catalog entry Ingen GREPLAY SG Annotate facilitet Bemærk: anderledes funktionalitet ODS GRAPHICS statement sætter generelle grafiske options. Mange andre options angives i de enkelte grafiske procedurer. Axis, marker symbol, legend og fill attributter er ikke globale og kan kontrolleres med style options i procedure syntaks, via ændringer i style templates eller direkte i GTL. Både SGPANEL og SGSCATTER procedurerne og GTL statements kan bruges til at placere flere grafer på en side. Nogen fleksibilitet i kontrollen af udseende PDF-filer kan dannes med Vector grafik, fylder kun lidt, står meget skarpt

Mange, mange erfaringer og program eksempler GMAP, GCONTOUR, G3D, pie chart (GCHART) GTILE, GRADAR, GKPI, donut og star charts (GCHART) Findes ikke eller kun via store omveje Nyt og med begrænset erfaringsgrundlag Findes delvis i GTL ingen lette genveje Findes ikke Dot plots, vector plots, horizontal box plots, ellipse plots, distribution curves De tre nemme metoder til grafik Direkte i procedurer Grafiske statements i de statistiske procedurer og forskellige andre procedurer i andre dele af SAS-systemet giver brugeren direkte adgang til en grafisk afbildning af de bearbejdede data. Her følger et eksempel på et plot statement. proc logistic data=neuralgia plots(only)=oddsratio( cldisplay = line order = ascending type = horizontalstat range = (0,2) ); class treatment sex; model pain= treatment age sex treatment*age sex*age treatment*sex; oddsratio age / at(treatment='a' 'B' 'P' sex='m' 'F'); Hele definitionen på opbygningen af grafikken styres af Graphics Template Language-kode lagret i en ODS Graphics template. Hvis man som bruger skulle have et stærkt behov for at tilpasse grafikken yderligere, er det faktisk muligt at finde den rigtige template frem, rette den til og lagre den, så plotstatementet får den nye funktionalitet, som ønskes. Først må man jo finde frem til den rigtige template, det gøres med: ods trace on; <programmet ovenfor> ods trace off; Den eller de anvendte templates vises i LOG-vinduet, og så kan man bruge TEMPLATE-proceduren til at få vist indholdet af de SAS-leverede templates: proc template; source Stat.Logistic.Graphics.ROC; source Stat.Logistic.Graphics.ROCOverlay; quit; Endelig kan en nogenlunde GTL-kyndig programmør ud fra den default template bygge en ny version med de ønskede modifikationer. Se nærmere om dette fx i dette paper fra SAS Global Forum 2012: 081-2012.

ODS Graphics designer Med ODS Graphics Designer kan der dannes et utal af grafer, som kan kombineres på mange forskellige måder. De dannede programmer kan gemmes som SAS-kode, der kan indgå i en daglig statusopdatering. For programmøren med kendskab til GTL kan det være grundlaget, som der bygges videre på med de avancerede funktioner, der kun kan opnås på denne måde. ODS Graphics Designer er en selvstændig applikation, den findes under Tools->ODS Graphics Designer i SAS Display Manager. Den kan også startes op fra Enterprise Guide 5.1 under Tasks- >Graphs->Open ODS Graphics Designer. Skal grafikken alene vedligeholdes via Designeren gemmes resultatet i et SGD-projekt, som man altid kan åbne og arbejde videre på. Der er en god tutorial for ODS Graphics designer i dette paper fra SAS Global Forum 2012: 153-2012. SG-procedurerne Der er 5 SG-procedurer, de 2 anvendes alene til at danne den grafik, der er dannet med enten GTL (SGRENDER) eller i SGD-projekter (SGDESIGN). Af de 3 resterende SG-procedurer er SGPLOT den helt centrale; med den dannes langt de fleste grafer. SGPANEL ligner SGPLOT med den tilføjelse, at den er fokuseret på grupper af grafer med samme akser og layout, hvor grupperne defineres af en

eller flere variabler. SGSCATTER danner også flere grafer; men den er designet til at vise forskellige aspekter af variabel-sammenligningen i hver enkelt graf. Det almindelige output dannet af SG-procedurerne er i normale formater som PNG og JPEG, der er udmærket til anvendelse i andre applikationer og på nettet. Den måde som SG-plots ser ud på styres med ODS Styles, som giver et pænt standard udseende. Der er en del muligheder inden for SG-procedurerne for yderligere styring; derudover er der med GTL endnu flere - og et stadig voksende antal ekstra statements til at opnå det ønskede resultat. Graftyperne kan ses som byggeklodser, hver type kan bruges selvstændigt, og nogle kan bruges sammen for at formidle mere information i et enkelt plot. Forstå plottyperne i SGPLOT og SGPANEL Der findes 4 kategorier af de grundlæggende plot-statements, som kan kombineres på forskellige måder inden for den samme graf. Det er dog ikke alle statements, der kan kombineres frit. Plot type Basic plots Fit and Confidence plots Distribution plots Categorization plots Statement SCATTER, SERIES, STEP, BAND, NEEDLE, VECTOR LOESS, REG, PBSLINE, ELLIPSE VBOX, HBOX, HISTOGRAM, DENSITY DOT, VBAR, HBAR, VLINE, HLINE De kan med SGPLOT eller SGPANEL kombineres med hinanden på følgende måde Plot type Basic plots Fit and Confidence plots Basic plots X X Fit and Confidence plots X X Distribution plots Categorization plots Distribution plots X Categorization plots X Eksempler: proc sgplot data=sashelp.stocks; series x=date y=close / group=stock; som giver følgende plot:

proc sgplot data=sashelp.orsales; scatter x=quantity y=profit; xaxis type=log grid; yaxis type=log grid; som giver følgende plot: Et eksempel på SGPANEL: proc sgpanel data=sashelp.orsales; panelby product_line; dot year / response=profit;

som giver følgende plot: Hvordan skal det se ud og hvor skal det hen Men det er jo ikke nok bare at angive et par statements i en SG-procedure. Der er muligheder for at styre, hvordan grafikken skal se ud, hvordan akserne vises, layout og om resultatet skal ud som HTML, PDF, RTF eller andet - eller det hele på en gang. På fuldstændig samme måde som ODSstatements styrer tabel og liste- output, styrer brugeren med ODS-statements det grafiske output. ODS og Styles Jeg vil kun vise et par enkle eksempler, der er rigtig mange muligheder. ods graphics /reset width=1024px imagename='ex1' imagefmt=png; ods html gpath='c:\forum\html' path='c:\forum\html' file='ex1.html' style=printer; ods pdf file='c:\forum\pdf\ex1.pdf' notoc dpi=600 style=journal2;

Den lidt mindre nemme metode til grafik Graph Template Language er den mest komplicerede metode; men her opnås til gengæld stort set fuld kontrol over sammensætning og grafisk præsentation. Der er som tidligere nævnt en del elementer i GTL, som ikke kan findes via, hverken ODS Graphics Designer eller SG-procedurerne. Der er også en del muligheder for efterbehandling af data, der kan hjælpe i den grafiske præsentation. Her er et eksempel: proc template; define statgraph mygraphs.example5; begingraph; layout overlay / x2axisopts=(display=(line) linearopts=(viewmin=-1 viewmax=4)); boxplot x=drivetrain y=mpg_city / display=(caps mean median) fillattrs=(color=white); scatterplot x=eval(all+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=blue); scatterplot x=eval(front+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=red); scatterplot x=eval(rear+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=green); endlayout; endgraph; end; proc sgrender data=cars2 template="mygraphs.example5";

Grafen viser benzinforbruget for bilerne i sashelp.cars fordelt på For-, Bag- og Firhjulstrukne med et SCATTERPLOT for hver biltype og med et BOXPLOT, der viser CAPS-, MEAN- og MEDIANværdierne. Med SAS/GRAPH er det ikke muligt at kombinere BOXPLOT og SCATTERPLOT; men det kan lade sig gøre med GTL. Et SCATTERPLOT, hvor den ene dimension er en enkelt værdi, gør det umuligt at få et indtryk af, hvor mange punkter der er. Ved at tilføje en lille random-faktor kan man få fordelt punkterne lidt til højre og venstre og få et tydeligt indtryk af antallet. Det sidste eksempel er et forsøg på at vise en stor kompliceret datamængde på en *måske* overskuelig måde:

Kernen i den template kode, der opbygger denne visualisering er layout lattice / columns=2 columndatarange=unionall columnweights=(0.47 0.53); layout overlay / walldisplay=none yaxisopts=(display=none) xaxisopts=(reverse=true display=(tickvalues) linearopts=(tickvalueformat=percent. viewmin=0) ); entry halign=left 'Mænd' / valign=top rotate=90 textattrs=(size=16 color=darkblue weight=bold ) ; seriesplot x=pct_m y=alder / group=aar_attrvar smoothconnect=true lineattrs=(pattern=solid thickness=2) datatransparency=0.5; endlayout; layout overlay / walldisplay=none yaxisopts=(display=(tickvalues)) xaxisopts=(display=(tickvalues) linearopts=(tickvalueformat=percent. viewmin=0) ); entry halign=right 'Kvinder' / valign=top rotate=270 textattrs=(size=16 color=darkorchid weight=bold ); seriesplot x=pct_k y=alder / group=aar_attrvar smoothconnect=true lineattrs=(pattern=solid thickness=2) datatransparency=0.5;

endlayout; endlayout; discretelegend '1980' '2012' '2050' / title='år'; drawimage "c:\forum\image\sas_logo.jpg" / anchor=bottom x=90 y=1 height=5 drawspace=wallpercent ; Dertil kommer kode til at styre farvesætningen af den BEREGNEDE variabel aar_attrvar og til definition af den begrænsede legend: discreteattrmap name='aar'; %lineattr; enddiscreteattrmap; discreteattrvar attrvar=aar_attrvar var=aar attrmap="aar"; legenditem name='1980' type=line / label='1980' lineattrs=(color=cxff0000 thickness=2); legenditem name='2012' type=line / label='2012' lineattrs=(color=cx000000 thickness=2); legenditem name='2050' type=line / label='2050' lineattrs=(color=cxffff00 thickness=2); Macroen %lineattr er selvfølgelig essentiel det er særdeles uproduktivt og besværligt at skulle skrive 80 enkeltlinier med VALUE statements: %macro lineattr; %do aar=1980 %to 2011; %let t=%sysevalf((&aar-1980) * %sysevalf(255/70),integer); %let tone=%sysfunc(putn(&t,hex2.)); value "&aar" / lineattrs=(color=cxff&tone.00); %end; %do aar=2012 %to 2012; value "&aar" / lineattrs=(color=cx000000); %end; %mend; %do aar=2013 %to 2050; %let t=%sysevalf((&aar-1980) * %sysevalf(255/70),integer); %let tone=%sysfunc(putn(&t,hex2.)); value "&aar" / lineattrs=(color=cxff&tone.00); %end; Hele formålet med alle disse VALUE statements i DISCRETEATTRMAP er gradvist at ændre farve for den viste line for et årstal fra rød i 1980 til gul i 2050 og så lige med en sort linie for indeværende år. Hele koden til dette og alle de andre eksempler vist gøres snarest tilgængeligt på SAS Forums webpages. Se meget mere om anvendelsen af GTL i øvrigt i disse SAS Global Forum papers: 285-2012, 262-2012, 267-2012, 280-2012, 234-2012, 234-2012, 240-2012

Og et par af ODS Graphics-nyhederne i SAS 9.3 i øvrigt: ODS Graphics er nu en del af Base SAS Nye plot statements i SGPANEL og SGPLOT: o BUBBLE o HBARPARM og VBARPARM o HIGHLOW o LINEPARM o WATERFALL SGANNO= anvend et annotate datasæt, bruges i forbindelse med Ny Annotate feature med mulighed for at tilføje ekstra elementer til en graf: o ARROW o IMAGE o LINE o OVAL o POLYGON o RECTANGLE o TEXT Et (dårligt) eksempel fra support.sas.com: LINE SG Annotation Data Set Der er faktisk mulighed for en variabel DRAWSPACE=DATAVALUE (eller forskellige andre værdier). Det ville betyde, at fx Y1 og Y2 værdierne kunne være de 62, der faktisk er gennemsnitshøjden. Eksemplet anvender default for DRAWSPACE, som er GRAPHPERCENT og så skal Y1 og Y2 rigtignok være ca. 60.

LINE SG Annotation Output SAS-programmet: proc sgplot data=sashelp.class sganno=line; scatter x=weight y=height;

Mine kilder, hvorfra jeg med dyb taknemlighed har hugget med arme og ben Generelt finder du et væld af information i SAS Global Forum proceedings 2012: http://support.sas.com/resources/papers/proceedings12/index.html Disse SGF-papers er sammen med SAS-dokumentationen på http://support.sas.com mine kilder: Cynthia L. Zender and Mike Kalt, SAS Institute, Inc., Cary, NC At the Crossroads: How to Decide on Your Graphics Path http://support.sas.com/resources/papers/proceedings12/261-2012.pdf Jesse M. Pratt, Cincinnati Children s Hospital Medical Center, Cincinnati, OH The Graph Template Language: Beyond the SAS/GRAPH Procedures http://support.sas.com/resources/papers/proceedings12/285-2012.pdf Lora D. Delwiche, University of California, Davis, CA Susan J. Slaughter, Avocet Solutions, Davis, CA Graphing Made Easy with SG Procedures http://support.sas.com/resources/papers/proceedings12/259-2012.pdf Chuck Kincaid, Experis, Portage, MI Using SAS ODS Graphics http://support.sas.com/resources/papers/proceedings12/154-2012.pdf Sanjay Matange, SAS Institute Inc., Cary, NC Quick Results with SAS ODS Graphics Designer http://support.sas.com/resources/papers/proceedings12/153-2012.pdf Patricia A. Berglund, Institute For Social Research-University of Michigan, Ann Arbor, Michigan Enhanced Data Analysis using SAS ODS Graphics and Statistical Graphics http://support.sas.com/resources/papers/proceedings12/349-2012.pdf Yang Xiao, University of Cincinnati, Cincinnati, OH Xiangxiang Meng, SAS Institute Inc., Cary, NC Customizing ODS Graphical Output for SAS/STAT Procedures http://support.sas.com/resources/papers/proceedings12/081-2012.pdf Gabe Cano, Altarum Institute, San Antonio, TX, USA Convert Your Old Plots and Charts to New SG Plots and Charts: Here s How http://support.sas.com/resources/papers/proceedings12/083-2012.pdf Marje Fecht, Prowerk Consulting, Canada and USA Rupinder Dhillon, Dhillon Consulting, Toronto, ON, Canada SAS Enterprise Guide 4.3: Finally a Programmer s Tool http://support.sas.com/resources/papers/proceedings12/145-2012.pdf

Perry Watts, Stakana Analytics, Elkins Park, PA Nate Derby, Stakana Analytics, Seattle, WA Using SAS GTL to Visualize Your Data When There is Too Much of It to Visualize http://support.sas.com/resources/papers/proceedings12/262-2012.pdf Prashant Hebbar, SAS Institute Inc., Cary, NC Off the Beaen Path: Create Unusual Graphs with GTL http://support.sas.com/resources/papers/proceedings12/267-2012.pdf Qinghua (Kathy) Chen, Genentech, a member of Roche family, South San Francisco, CA Innovative uses of ODS and GTL http://support.sas.com/resources/papers/proceedings12/280-2012.pdf Chuck Kincaid and Jack Fuller, Experis, Kalamazoo, MI SG Techniques: Telling the Story Even Better! http://support.sas.com/resources/papers/proceedings12/234-2012.pdf Michael Drutar, SAS Institute Inc., Cary, NC There s an App for That : It s Called SAS ODS! Mobile Data Entry and Reporting via SAS ODS http://support.sas.com/resources/papers/proceedings12/240-2012.pdf Scott Huntley and Woody Middleton, SAS, Cary, NC, USA A Different Point of View with ODS PDF in SAS 9.3 http://support.sas.com/resources/papers/proceedings12/260-2012.pdf

SAS programmer Almindelige SAS procedurer, SGplot med mere ods graphics on; /* IKKE nødvendig i SAS 9.3 Display Manager; SKAL sættes i batch og for EG */ options fmtsearch=(sasuser.formats); ods pdf file='c:\forum\pdf\freq_oversigt1.pdf'; proc freq data=sasuser.befolkning page; tables Region*AldersGruppe /plots=freqplot format=commax18.; weight value /zeros; *where Region in ('084' '085'); ; ods pdf close; options dev=actximg; ods pdf file='c:\forum\pdf\univariate_oversigt1.pdf' ; proc univariate data=sasuser.aldersfordeling noprint; var value; histogram value; ods pdf close; *ods graphics / antialiasmax=1000; proc sgplot data=sashelp.orsales; scatter x=quantity y=profit; pbspline x=quantity y=profit / lineattrs=(color=darkorange thickness=5) ; xaxis type=log grid ; yaxis type=log grid ; ods graphics /reset width=800px imagename='ex03' antialiasmax=1000; ods html gpath='c:\forum\html' path='c:\forum\html' file='ex03.html' style=htmlblue; proc sgplot data=sashelp.stocks; series x=date y=close / group=stock; inset 'SAS Forum 2012' / TEXTATTRS=(Color=Green Family=Arial Size=12 Style=Italic Weight=Bold);

proc sgplot data=sashelp.heart; histogram cholesterol; density cholesterol; density cholesterol / type=kernel; keylegend / location=inside position=topright; title 'SAS Forum 2012'; proc sgplot data=sashelp.failure; waterfall category=cause response=count / stat=mean dataskin=pressed; inset 'Waterfall er preproduction med SAS 9.3' / TEXTATTRS=(Color=Blue Family=Arial Size=12 Style=Italic Weight=Bold); title; ods graphics /reset width=600px imagename='ex04' antialiasmax=1000; ods html gpath='c:\forum\html' path='c:\forum\html' file='ex04.html' style=htmlblue; proc sgpanel data=sashelp.orsales; panelby product_line; dot year / response=profit markerattrs=(color=deeppink size=15 symbol=starfilled); ODS html FILE="c:\forum\html\sgscatter.html" STYLE=default gpath='c:\forum\html'; title "Befolkningtal pr region, Aldersfordelt"; PROC SGSCATTER DATA=sasuser.aldersfordeling2 ; COMPARE Y=(_2008M04 _2009M04 _2010M04 _2011M04) X=Aldersgruppe / GROUP=Region MARKERATTRS=(SIZE=10) JOIN=(LINEATTRS=(PATTERN=SOLID)) GRID ; RUN; title; Annotate SGanno data sæt data sg_ds;

infile datalines dlm='#'; length label $ 27 textcolor $ 9 linecolor $ 9 textfont $ 10 textweight $ 9 ; input function $ x1 y1 label x2 y2 textcolor linecolor textfont textsize textweight rotate; datalines; text # 90 # 94 # SAS Forum 2012 #. #. # red # # Arial # 10 # bold # -45 text # 75 # 72 # SAS Forum 2012 #. #. # red # # Arial # 10 # bold # 45 text # 75 # 50 # SAS Forum 2012 #. #. # red # # Arial # 10 # bold # 135 text # 90 # 28 # SAS Forum 2012 #. #. # red # # Arial # 10 # bold # 225 ; ODS html FILE="c:\forum\html\sgscatter.html" STYLE=default gpath='c:\forum\html'; title "Befolkningtal pr region, Aldersfordelt"; PROC SGSCATTER DATA=sasuser.aldersfordeling2 sganno=sg_ds; COMPARE Y=(_2008M04 _2009M04 _2010M04 _2011M04) X=Aldersgruppe / GROUP=Region MARKERATTRS=(SIZE=10) JOIN=(LINEATTRS=(PATTERN=SOLID)) GRID ; RUN; title; ODS Graphics Template eksempler proc sort data = sashelp.cars out=cars; by ENGINESIZE; data cars; set cars nobs=totalobs; ECDF=_N_/TOTALOBS; proc template; define statgraph mygraphs.example2; begingraph; layout lattice / columns=2; layout overlay; densityplot ENGINESIZE / kernel(c=1.2); endlayout; layout overlay / yaxisopts=(label="cdf"); scatterplot x=enginesize y=ecdf;

loessplot x=enginesize y=ecdf; endlayout; endlayout; endgraph; end; proc sgrender data=cars template="mygraphs.example2"; Beregninger i Template koden proc sort data=sashelp.cars; by DRIVETRAIN; data cars2; set sashelp.cars; if DRIVETRAIN="All" then ALL=-1; if DRIVETRAIN="Front" then FRONT=1.5; if DRIVETRAIN="Rear" then REAR=4; proc template; define statgraph mygraphs.example8; begingraph; layout overlay / x2axisopts=(display=(line) linearopts=(viewmin=-1 viewmax=4)); boxplot x=drivetrain y=mpg_city / display=(caps mean median) fillattrs=(color=white); scatterplot x=eval(all+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=blue); scatterplot x=eval(front+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=red); scatterplot x=eval(rear+0.1*rannor(0)) y=mpg_city / xaxis=x2 markerattrs=(color=green); endlayout; endgraph; end; ods graphics /reset width=1024px imagename='ex8'; * imagefmt=png; ods html gpath='c:\forum\html' path='c:\forum\html' file='ex8.html' style=printer; ods pdf file='c:\forum\pdf\ex8.pdf' notoc dpi=300 style=journal2; proc sgrender data=cars2 template="mygraphs.example8"; ods pdf close;

Befolkningudvikling oversigten %macro lineattr; %do aar=1980 %to 2011; %let t=%sysevalf((&aar-1980) * %sysevalf(255/70),integer); %let tone=%sysfunc(putn(&t,hex2.)); value "&aar" / lineattrs=(color=cxff&tone.00); %end; %do aar=2012 %to 2012; value "&aar" / lineattrs=(color=cx000000); %end; %do aar=2013 %to 2050; %let t=%sysevalf((&aar-1980) * %sysevalf(255/70),integer); %let tone=%sysfunc(putn(&t,hex2.)); value "&aar" / lineattrs=(color=cxff&tone.00); %end; %mend; options mprint; proc template; define statgraph pop_pyramid; begingraph; Entrytitle 'Danmark: Udvikling i befolkningsfordeling 1980-2050'; 0.53); ); ; datatransparency=0.5; discreteattrmap name='aar'; %lineattr; enddiscreteattrmap; discreteattrvar attrvar=aar_attrvar var=aar attrmap="aar"; legenditem name='1980' type=line / label='1980' lineattrs=(color=cxff0000 thickness=2); legenditem name='2012' type=line / label='2012' lineattrs=(color=cx000000 thickness=2); legenditem name='2050' type=line / label='2050' lineattrs=(color=cxffff00 thickness=2); layout lattice / columns=2 columndatarange=unionall columnweights=(0.47 layout overlay / walldisplay=none yaxisopts=(display=none) xaxisopts=(reverse=true display=(tickvalues) linearopts=(tickvalueformat=percent. viewmin=0) entry halign=left 'Mænd' / valign=top rotate=90 textattrs=(size=16 color=darkblue weight=bold ) seriesplot x=pct_m y=alder / group=aar_attrvar smoothconnect=true lineattrs=(pattern=solid thickness=2)

endlayout; layout overlay / walldisplay=none yaxisopts=(display=(tickvalues)) xaxisopts=(display=(tickvalues) linearopts=(tickvalueformat=percent. viewmin=0) ); entry halign=right 'Kvinder' / valign=top rotate=270 textattrs=(size=16 color=darkorchid weight=bold ); seriesplot x=pct_k y=alder / group=aar_attrvar smoothconnect=true lineattrs=(pattern=solid thickness=2) datatransparency=0.5; discretelegend '1980' '2012' '2050' / title='år'; drawimage "c:\forum\image\sas_logo.jpg" / anchor=bottom x=90 y=1 height=5 drawspace=wallpercent ; 2012' / endlayout; endlayout; entryfootnote halign=left 'Data fra Danmarks Statistik oktober textattrs=(size=8); drawtext textattrs=(color=gray size=40pt) "SAS Forum 2012" / transparency=.75 rotate=-30 width=110 widthunit=percent justify=center ; end; endgraph; ods graphics / reset height=650px antialiasmax=1500 imagename='ex04'; ods html path='c:\forum\html' file='befolkningsudvikling.html' gpath='c:\forum\html' style=htmlblue; ods pdf file='c:\forum\pdf\befolkningsudvikling.pdf' notoc dpi=300; title; proc sgrender data=sasuser.befolkning1980til2050 template=pop_pyramid; Datagrundlaget for befolkningsoversigten Inden dette program kan køres skal data hentes fra Danmarks Statistik, Statistikbanken. Data er delt op i to forespørgsler, én for befolkningsudviklingen fra 1980 til nu; den anden er en prognose for befolkningsudvikling frem til 2050. De to SAS programmer, som Statistikbanken leverer bestilles på følgende måde:

http://www.dst.dk/da/statistik/statistikbanken.aspx Vælg Gå til Statistikbanken EMNER Befolkning og valg Folketal FOLK2 alle Aldre, begge køn, alle år Befolkningsfremskrivning FRDK112 alle Aldre, begge køn, alle år For begge tabeller vælges Vis tabel Gem som SAS program downloades halvautomatisk til din pc De opretter SAS tabeller med SAMME navne i WORK, derfor er en af tabellerne omdøbt til WORK.FCODES efter kørsel af det første DS program derefter er det andet kørt, og så dette: proc format; value Alder low-4 = '00-04' 5-9 = '05-09' 10-14 = '10-14' 15-19 = '15-19' 20-24 = '20-24' 25-29 = '25-29' 30-34 = '30-34' 35-39 = '35-39' 40-44 = '40-44' 45-49 = '45-49' 50-54 = '50-54' 55-59 = '55-59' 60-64 = '60-64' 65-69 = '65-69' 70-74 = '70-74' 75-79 = '75-79' 80-84 = '80-84' 85-89 = '85-89' 90-94 = '90-94' 95-99 = '95-99'

100-high= 'o.100' ; data befolkning; set codes fcodes; rename v1=aar V2=Kon value=antal; if v3='100-' then v3=100; Alder = put(input(v3,3.),alder.); drop v3; proc tabulate data=befolkning out=tb_m ; where kon='m'; class Aar Alder; var Antal; table aar*(alder all) all,antal*(sum pctsum<alder all>); data tb_m; set tb_m; where _type_='11'; drop _type page table_ antal_pctsum_00 Antal_pctsum_10; rename Antal_Sum=Antal_M; Pct_M = round(antal_pctsum_10,0.01)/100; proc tabulate data=befolkning out=tb_k ; where kon='k'; class Aar Alder; var Antal; table aar*(alder all) all,antal*(sum pctsum<alder all>); data tb_k; set tb_k; where _type_='11'; drop _type page table_ antal_pctsum_00 Antal_pctsum_10; rename Antal_Sum=Antal_K; Pct_K = round(antal_pctsum_10,0.01)/100; data sasuser.befolkning1980til2050; merge tb_m tb_k; by Aar Alder;