HOOFDSTUK 4 HET OUTPUT DELIVERY SYSTEEM (ODS) ........................ 141 4.1 Wat is ODS ? ................................................................................................................................. 141 Inleiding .................................................................................................................................................. 141 Hoe werkt ODS? ..................................................................................................................................... 144 ODS bestemmingen ................................................................................................................................ 145 ODS statement ........................................................................................................................................ 145 4.2
Listing output ................................................................................................................................ 146
4.3 HTML output ............................................................................................................................... 148 Meest eenvoudige HTML output ............................................................................................................ 148 Inhoudstafel weergeven .......................................................................................................................... 150 Andere stijl opgeven ............................................................................................................................... 152 Aanpassen van PROC PRINT layout met behulp van stijlen .................................................................. 154 4.4
RTF output .................................................................................................................................... 160
4.5
PDF output .................................................................................................................................... 162
4.6 Selectie van onderdelen uit de output ......................................................................................... 164 Meerdere Output objecten bij één procedure .......................................................................................... 164 Het ODS TRACE statement .................................................................................................................... 166 Selectie van Output objecten ................................................................................................................... 168 4.7 Aanmaken van output datasets via ODS .................................................................................... 173 ODS OUTPUT statement ........................................................................................................................ 173
INHOUD
ICTS FOOCES
140
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
141
Hoofdstuk 4 Het Output Delivery Systeem (ODS) 4.1 Wat is ODS ? Inleiding Het Output Delivery System (ODS) van SAS laat toe verschillende types output te genereren. De traditionele listing output heeft immers een aantal beperkingen oa. monospace fonts, geen mogelijkheid om lay-out aan te passen (font, kleur,…), tabellen kunnen niet als ‘tabel’ in de tekstverwerker gekopieerd worden of niet rechtstreeks in een Excel worksheet gebracht worden, enz…. Vanaf SAS versie 8 is het naast het genereren van gewone listing output ook mogelijk om bijvoorbeeld HTML, PDF en RTF output aan te maken. Bovendien kan de gebruiker de lay-out van de output wijzigen. Interessant is ook de mogelijkheid om onderdelen van de output van een procedure in een nieuwe SAS dataset te bewaren via het nieuwe ODS systeem. Sommige procedures bieden reeds die functionaliteit via een OUTPUT statement of de OUT= optie, maar dit is niet in alle procedures voorzien. Je kan daarenboven bepaalde componenten uit de output selecteren of weglaten. Vanaf SAS 9.2 is ODS GRAPHICS ook toegevoegd. Dit laat toe dat vele statistiche procedures automatisch grafieken kunnen produceren met een mooie presentatie.
Illustratie van de verschillende types output die SAS kan genereren Onderstaand voorbeeld toont de output van een PROC MEANS step die één keer uitgevoerd werd, maar waarbij de output in listing, HTML, RTF, PDF en tenslotte onder vorm van een SAS dataset werd gegenereerd:
ICTS FOOCES
Standaard (traditionele ) listing output
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
HTML output
output in PDF formaat
ICTS FOOCES
142
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
output in RTF (richt text format) formaat
laat toe om output rechtstreeks in Word binnen te halen.
output onder de vorm van een SAS dataset
Voor elk type van output wordt een link naar het output object voorzien in het Results venster:
listing output SAS data set HTMLoutput PDF rtf output
ICTS FOOCES
143
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
144
Hoe werkt ODS? Output wordt in SAS gecreëerd onder de vorm van Output objecten. Tijdens de uitvoering van een procedure of data step worden één of meerdere output objecten aangemaakt. Naargelang de bestemming(en) die de gebruiker opvraagt, worden de verschillende types output gegenereerd. Het output object is onafhankelijk van het formaat waarin de output uiteindelijk moet komen. Elk output object bestaat uit 2 componenten: een data component: de collectie van getallen en karakter strings die de eigenlijke output uitmaken en het resultaat zijn van de uitvoer van de procedure of de data step. een template component: een reeks SAS statements die omschrijven hoe de output geschikt wordt en hoe deze er moet uitzien. Aanmaken en wijzigen van templates kan via de TEMPLATE procedure. Dit wordt niet behandeld in deze cursus.
Data compontent
Output Object
Template compontent
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
145
ODS bestemmingen Teneinde verschillende types output aan te maken dient de gebruiker de gewenste uitvoer bestemmingen op te geven. Zo worden vanaf het ongeformatteerd output object dan de verschillende types output gegenereerd.
Data compontent
output output object object
Bestemming
Resultaat
Output
SAS data set
Listing
output venster
HTML
HTML file
PDF PDF file Template compontent
RTF
RTF file
Printer
Postscript file of PCL
Volgende types output zijn in de SAS versie 9 toegevoegd :
Latex XML GRAPHICS
ODS statement In Hoofdstuk 1 werd aangeraakt hoe HTML output kan opgevraagd worden via het dialoog venster bij Tools Options Preferences. Om andere types output te genereren, bvb. een RTF bestand, dient de overeenkomstige ODS bestemming, bvb. de RTF bestemming, te worden geopend. Dit gebeurt aan de hand van het ODS statement. Het ODS statement is een globaal statement. Ze kunnen bijgevolg eender waar in je SAS programma gebruikt worden. Indien een bestemming geopend is kan SAS ODS objecten naar deze bestemming sturen. Wanneer een bestemming gesloten is, kunnen er geen objecten naartoe worden gestuurd. Default bij het opstarten van SAS is de listing bestemming open en de overige bestemmingen zijn gesloten. Naast het openen en sluiten van bestemmingen dient het ODS statement ook om andere aspecten van de output te regelen. Dit alles wordt in de volgende paragrafen geïllustreerd.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
146
4.2 Listing output Als SAS opgestart wordt is listing output de standaard output. De output van procedures wordt getoond in het output venster onder vorm van ASCII tekst. Dit betekent ook dat de listing bestemming default geopend is bij het opstarten van SAS en dat dit de default ODS bestemming is (andere bestemmingen zijn default gesloten). Om de listing bestemming te sluiten -indien u geen listing output meer wenst- dient u deze expliciet uit te schakelen via het ODS LISTING statement. De syntax is de volgende:
ODS LISTING ;
opent de listing bestemming
….SAS code…….
ODS LISTING CLOSE ;
sluit de listing bestemming
Indien je de listing bestemming sluit, maakt SAS niet langer listing output aan. Dit blijft zo voor de rest van de SAS sessie, tenzij je de listing bestemming terug opent via ODS LISTING.
Openen en sluiten van de listing bestemming 1. Onderstaand SAS programma gebruikt het ODS LISTING statement om de LISTING output te activeren en terug te deactiveren. Het ODS LISTING statement is niet noodzakelijk indien je zeker weet dat de listing bestemming al actief is ( is de default). Typ het programma in het Editor venster. De libref CURSUS moet bestaan en verwijzen naar de voorbeeldenmap.
ods listing ; proc tabulate data = cursus.vluchten ; class categorie type_vlucht; table categorie, type_vlucht ; run; ods listing close;
2. Voer het programma uit en kijk naar het Results en het Output venster.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
3. Voer terug het PROC TABULATE programma uit maar zonder de ODS statements. Herinner je dat de listing bestemming gedeactiveerd werd door het opgeven van ODS LISTING CLOSE. proc tabulate data = cursus.vluchten ; class categorie type_vlucht; table categorie, type_vlucht ; run; 4. In het log-scherm wordt volgende boodschap gegeven:
De PROC TABULATE werd uitgevoerd, maar aangezien er geen enkele uitvoer bestemming open staat, wordt er geen output geproduceerd. 5. Submit een ODS LISTING statement om de LISTING output terug te activeren.
Het opgeven van ODS LISTING FILE = ‘naam tekstbestand’ ; zorgt ervoor dat de output onmiddellijk in een tekstbestand bewaard wordt.
ICTS FOOCES
147
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
148
4.3 HTML output In Hoofdstuk 1 werd reeds een mogelijkheid toegelicht voor de aanmaak van HTML output via het Preferences venster onder Tools Options. Via het ODS statement zijn de mogelijkheden meer uitgebreid betreffende de aanmaak en lay-out van HTML output.
Meest eenvoudige HTML output Om HTML output te genereren via ODS dient de HTML bestemming te worden geopend. Dit kan via het ODS HTML statement.
ODS HTML FILE = ‘naam html-bestand’ ;
openen HTML bestemming en opgeven HTML documentnaam
… SAS code … ODS HTML CLOSE ;
sluit de HTML bestemming
of ODS HTML
PATH = ‘ lokatie van bestand’ (URL=NONE) BODY =’naam html-bestand’;
… SAS code … ODS HTML CLOSE ;
sluit de HTML bestemming
De suboptie URL=NONE kan je gebruiken om de fysische lokatie niet op te nemen in links die in de HTML file aangemaakt worden. Geef je bij de BODY= optie ook de lokatie mee, dan is de PATH= optie overbodig. In feite doet de BODY= optie net hetzelfde als de FILE= optie. Ofwel geef je alleen de bestandnaam op, ofwel de lokatie en de bestandsnaam (volledige pad).
ODS HTML statement 1. Herneem de TABULATE procedure van vorige oefening, maar plaats nu ODS HTML statements rond de code. Geef in de FILE=optie de naam op van het bestand waarin je de HTML output wil bewaren. ods listing close; ods html file = ‘c:\user\tabel.html’ ; proc tabulate data = cursus.vluchten ; class categorie type_vlucht;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
149
table categorie, type_vlucht ; run; ods html close; ods listing;
Het is niet noodzakelijk om de listing output te sluiten. Laat je deze open, dan wordt zowel LISTING als HTML output aangemaakt. 2. Voer het programma uit 3. HTML output:
Werk je in een Windows omgeving, dan wordt het HTML bestand binnen SAS getoond in het Results Viewer venster. (Bij andere operating systemen zal de Web Browser geopend worden bij een dubbel klik op het output object in het Results venster) 4. Plaats je meerdere procedures tussen de ODS HTML statements, dan wordt de output van deze procedures naar hetzelfde HTML bestand weggeschreven. Voeg in het programma nog een PROC FREQ toe die frequenties per bestemming genereert. ods listing close; ods html file = ‘c:\user\tabel.html’ ; proc freq data = cursus.vluchten; tables bestemming ; run; proc tabulate data = cursus.vluchten ; class categorie type_vlucht; table categorie, type_vlucht ; run; ods html close; ods listing;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
150
HTML output:
Zowel de output van de FREQ procedure als van de TABULATE procedure bevindt zich in hetzelfde HTML bestand. Scroll naar beneden om de output van TABULATE te zien onder de frequentietabel afkomstig van de PROC FREQ.
Inhoudstafel weergeven Om de HTML output te voorzien van een inhoudstafel volstaat het de opties CONTENTS= en FRAME = toe te voegen aan het ODS HTML statement. ODS HTML
FILE = ‘naam basis html-bestand’ CONTENTS = ‘naam inhoudstafel-html-bestand’ FRAME = ‘naam frame-html-bestand’ ;
… SAS code …
ODS HTML CLOSE ;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
151
Het CONTENTS bestand bevat een inhoudstafel van de output die gegenereerd wordt tussen de ODS HTML statements. De inhoudstafel bevat links naar het FILE bestand (ook BODY bestand genoemd). Het FRAME bestand verbindt het CONTENTS bestand met het FILE (BODY) bestand.
ODS HTML statement met FRAME en CONTENTS 1. Vul het programma uit vorige oefening aan door toevoeging van een CONTENTS= en een FRAME= optie in het ODS HTML statement. ods listing close; ods html file = ‘c:\user\tabel.html’ contents = 'c:\user\c.html' frame = 'c:\user\f.html' ; proc freq data = cursus.vluchten; tables bestemming / nofreq; proc tabulate data = cursus.vluchten ; class categorie type_vlucht; table categorie, type_vlucht ; run; ods html close; ods listing; 2. Voer het programma uit. 3. In het Results Viewer venster binnen SAS wordt de inhoud van het FILE bestand getoond ( PC, Windows). Om het FRAME bestand te bekijken dat de inhoudstafel verbindt met het FILE bestand kies je File Open vanaf de bovenste menubalk en klik je het FRAME bestand (hier f.html ) aan.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
152
De Table of Contents is de inhoudstafel en nummert de output per procedure. Onder de procedure hoofding is een link (soms meerdere links) voorzien naar het FILE bestand. Door te klikken op de link wordt de output van die procedure naar voor gebracht.
Andere stijl opgeven Een stijl bepaalt de algemene lay-out van HTML output. Een stijl bestaat uit een reeks attributen dewelke onder meer de kleur, het type font en de fontgrootte vastleggen voor HTML output. Een stijl maakt deel uit van de TEMPLATE component van een ODS object. SAS levert een aantal stijlen mee waaruit kan worden gekozen. Het is ook mogelijk om de bestaande SAS stijlen aan te passen of zelf een volledig eigen stijl te definiëren. Hiervoor dient de TEMPLATE procedure te worden gebruikt. Hierop wordt in deze cursus niet verder ingegaan. Stijlen worden samen met andere templates bewaard in een template store (een specifiek type SAS bestand ). Om een lijst te verkrijgen van alle vooraf gedefinieerde stijlen volstaat het om rechts te klikken op Results (bovenaan in het Results venster). Kies vervolgens Templates, ontvouw de SASHELP.TMPLMST map en ontvouw helemaal onderaan de map STYLES.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
153
Een andere stijl opgeven kan door het gebruik van de STYLE= optie in het ODS HTML statement: waarbij de naam van de stijl wordt opgegeven zoals hij in de lijst staat, dus bijvoorbeeld D3d of STYLES.D3d, dat is hetzelfde.
Andere stijl opgeven 1. Vertrek weer van het laatst gesubmitte programma en voeg de optie STYLE= toe aan het voorgaande voorbeeld. Gebruik de SASDOCPRINTER stijl. ods listing close; ods html file = ‘c:\cursus\tabel.html’ contents = 'c:\cursus\c.html' frame = 'c:\cursus\f.html' style = styles.sasdocprinter ; proc freq data = cursus.vluchten; tables bestemming / nofreq; run; proc tabulate data = cursus.vluchten ; class categorie type_vlucht; table categorie, type_vlucht ; run; ods html close; ods listing;
2. Submit en bekijk de HTML output :
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
154
Aanpassen van PROC PRINT layout met behulp van stijlen Zoals in het begin van het hoofdstuk werd aangegeven kan de TEMPLATE procedure gebruikt worden voor het aanpassen van bestaande SAS stijlen of het creëren van een nieuwe stijl. Er bestaan 3 procedures waarbij het toch mogelijk is om vanuit de procedure zelf stijlelementen op te geven. Dit zijn de PRINT, de TABULATE en de REPORT 16 procedure. In deze paragraaf worden de mogelijkheden voor PROC PRINT besproken. Onderstaande tabel toont de verschillende componenten van de PROC PRINT procedure waarvan je de stijl (dus layout ) kan wijzigen. Wijzigingen aan de layout doe je door het opgeven van de STYLE= optie in welbepaalde statements van de PRINT procedure.
Component
Gedeelte van het rapport waarop deze invloed heeft
Data
de cellen van alle kolommen
Header
alle kolomhoofdingen
Obs ObsHeader
de data in de kolom Obs de kolomhoofding van de Obs kolom de label van de BY variabele op de lijn die de subtotalen van het SUM statement bevat de totalen van elke BY groep
ByYLabel
Total GrandTotal Table
het algemeen totaal als gevolg van het SUM statement Het structurele gedeelte van het rapport, zoals de breedte van de rand en de spaties tussen de cellen
PROC PRINT statement waarin STYLE=optie moet worden opgegeven PROC PRINT VAR ID SUM PROC PRINT VAR ID SUM PROC PRINT PROC PRINT PROC PRINT
PROC PRINT SUM PROC PRINT SUM PROC PRINT
Hieronder worden de verschillende componenten van de PRINT procedure op een output aangeduidt:
16
Deze procedure werd niet behandeld. Het is een procedure die samenvattende rapporten maakt met betrekking tot de gegevens, eerder geschikt voor lijstrapporten, zoals proc PRINT, maar meer mogelijkheden biedt.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
155
Header
ObsHeader
Obs Hea der
Data
Total
ByLabel
GrandTotal
De STYLE= optie heeft de volgende vorm: STYLE(component) = {ATTRIBUUT-1 = waarde-1 ……. ATTRIBUUT-n = waarde-n}
De attributen hebben betrekking op bepaalde kenmerken zoals de achtergrond (BACKGROUND ) of voorgrond (FOREGROUND) of font –grootte (FONT_SIZE) die men wil opgeven of wijzigen.
Attributen om kleur te wijzigen Wijzig de kleur van de achtergrond via het BACKGROUND attribuut: STYLE(component) = { BACKGROUND = kleur} Wijzig de kleur van de voorgrond via het FOREGROUND attribuut STYLE(component) = { FOREGROUND = kleur}
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
Voorbeeld : style(Obs) = { foreground = white
156
background = red}
Het is ook mogelijk een een formaat te gebruiken : style(Obs) = { foreground = kleurcode. } Attributen om de opmaak van tekst te wijzigen Voorbeelden van enkele attributen en mogelijke waarden: FOREGROUND FONT_FACE FONT_WEIGHT FONT_STYLE FONT_SIZE FONT_WIDTH
white,blue Times, Courier, Arial Medium, Bold, Light Italic, Roman 10pt, 12pt,.. Narow, Wide
Voorbeeld : style = { font_style =italic font_size = 12pt}
Meer informatie mbt kleuren is terug te vinden in de Online Documentatie, http://support.sas.com/documentation/index.html, onder SAS/GRAPH software, SAS/GRAPH 9.2 Reference -> SAS/Graph Concepts -> SAS/GRAPH colors and images -> Specifying colors in SAS/GRAPH programs. In Sas 9.2 is er nu True Color support (16milj. Kleuren in 1 afbeelding).
Bijkomende attributen en bestemmingen die deze attributen kennen is terug te vinden in de Online Documentatie. Surf naar http://support.sas.com/documentation/cdl/en/odsug/59523/HTML/default/a002972 093.htm
Gebruik van STYLE = optie in proc PRINT 1. Open het programma HOOFDSTUK4_STIJLPRINT.SAS. Hieronder wordt de code in onderdelen weergegeven met een aanduiding in de output op welke component de STYLE= optie effect heeft. ObsHeader
Obs Hea der
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
proc print data = cursus.vluchten label style(obs)={background=CXA185A6 foreground=CX803009 } /* CXA185A6= bleek purper ; CX803009= levendig rood oranje */ style(obsheader)= {background=lib foreground=white} /* lib= licht blauw */
Vervolg :
ByLabel
Total van PROC PRINT statement
proc print data = cursus.vluchten label ... style(bylabel)={background = salmon foreground=CX99293D } /* CX99293D = diep roos */ style(total)={background=white} ;
Vervolg: Header
Data
var type_vlucht bestemming categorie vertraging / style(header)={background= CX6B3D73 foreground=CXEDDDE0 font_weight=bold } /* CX6B3D73= mild purper ; CXEDDDE0= rozig wit */ style(data)={background=CXE8EDD5 foreground=CX6B3D73 font_weight=bold}
ICTS FOOCES
157
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
158
/* CX38EDD5 = gelig wit ; CX6B3D73= mild purper */; Vervolg: Total van SUM statement
GrandTotal van SUM statement
sum vertraging / style(total)={background=rose foreground = cream } style(GrandTotal)= {background=CXE8EDD5 Hieronder het ganse programma (HOOFDSTUK4_STIJPRINT.SAS): ods html body = 'voorbeeeld.html'; proc print data = cursus.vluchten label style(obs)={background=CXA185A6 foreground=CX803009 } /* CXA185A6= bleek purper ; CX803009= levendig rood oranje */ style(obsheader)= {background=lib foreground=white} /* lib= licht blauw */ style(bylabel)={background = salmon foreground=CX99293D } /* CX99293D = diep roos */ style(total)={background=white} ; var Type_vlucht Bestemming categorie vertraging / style(header)={background= CX6B3D73 foreground=CXEDDDE0 font_weight=bold } /* CX6B3D73= mild purper ; CXEDDDE0= rozig wit */ style(data)={background=CXE8EDD5 foreground=CX6B3D73 font_weight=bold} /* CX38EDD5 = gelig wit ; CX6B3D73= mild purper */; label type_vlucht ='Type van de vlucht'; by type_vlucht ; sum vertraging / style(total)={background=rose foreground = cream } style(GrandTotal)= {background=CXE8EDD5 foreground = blue } /* CXE8EDD5 = gelig wit */ ; run; ods html close ;run;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
159
Gebruik van kleurformaten in de STYLE = optie in proc PRINT 1. Open het programma HOOFDSTUK4_KLEURCODEPRINT.SAS. /* maak een formaat die bepaalde waarden verbindt met een kleur */ proc format; value kleurcode low - 0 = "green" 0 <- 10 = "orange" 10 <- high = "red"; run; /* open de ODS HTML bestemming */ ods listing close; ods html file="kleurcode.html"; /* gebruik proc print voor het aanmaken van een rapport */ proc print data = cursus.vluchten label ; var Type_vlucht Bestemming categorie; /* gebruik de sijl optie bij de variabele die je met */ /* de kleurcode wil formateren */ var vertraging / style={foreground=kleurcode.}; run; /* sluit de ODS HTML bestemming */ ods html close; ods listing;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
160
4.4 RTF output Om output in RTF (rich text format) te verkrijgen dient de RTF bestemming te worden geopend en wordt de output naar een (RTF) bestand weggeschreven. ODS RTF FILE = ‘naam rtf-bestand’ <STYLE = naam-stijl > ;
RTF bestemming openen , opgeven documentnaam en eventueel stijl meegeven
… SAS code …
ODS RTF CLOSE ;
RTF bestemming sluiten
RTF output 1. Plaats rond de PROC FREQ step in het Enhanced Editor venster de nodige ODS RTF statements. Geef de naam van een RTF bestand op waarin de RTF output moet bewaard worden. ods listing close ; ods rtf file = 'c:\user\test.rtf'
;
proc freq data = cursus.vluchten; tables bestemming; run; ods rtf close; ods listing; run; Het is niet noodzakelijk om de listing bestemming te sluiten. De output wordt dan in twee formaten gegenereerd, een listing output en een RTF output. 2. Submit het programma. RTF output wordt net zoals HTML output getoond in het Results Viewer venster ( PC, Windows). In het Results venster (links) zien we een Word-icoon verschijnen.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
161
De RTF bestanden zijn compatibel met MS-Word en kunnen bijgevolg rechtstreeks geopend of ingevoegd worden in een Word bestand.
2. Wijzig de default stijl naar de stijl MINIMAL door toevoeging van de STYLE=optie aan het ODS RTF statement ods listing close ; ods rtf file = 'c:\user\test.rtf' style = styles.minimal ; proc freq data = cursus.vluchten; tables bestemming; run; ods rtf close; ods listing; run; 3. Gedeelte van tabel in RTF output :
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
162
4.5 PDF output Het ODS PDF statement met de FILE= optie wordt gebruikt om de output in een PDF (Portable document format) te bewaren.
ODS PDF FILE = ‘naam PDF bestand’
<STYLE = naam-stijl > ;
… SAS code …
ODS PDF CLOSE ;
Voorbeeld : PDF output (HOOFDSTUK4_pdf.SAS) ods pdf file = 'c:\user\test.pdf'; proc tabulate data = cursus.vluchten ; class type_vlucht ; var vertraging ; table type_vlucht , vertraging* (mean std median) ; run; proc means data = cursus.vluchten mean std median q1 q3 min max; var vertraging ; class bestemming ; run ; ods pdf close; run;
Aangezien we nu de listing bestemming niet gesloten hebben zullen in het Results venster 2 output iconen te zien zijn: een listing en een PDF icoon. Dubbel klikken op het PDF icoon opent het PDF bestand in het Results Viewer venster van SAS (PC, Windows):
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
Deze bestanden kunnen via Acrobat Reader geopend en gelezen worden.
Op analoge wijze kunnen Postscript bestanden aangemaakt worden. Gebruik het ODS PS statement. ODS PS FILE = ‘naam postscript-bestand’ ; sas proc’s… ODS PS CLOSE ;
ICTS FOOCES
163
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
164
4.6 Selectie van onderdelen uit de output Meerdere Output objecten bij één procedure De voorbeelden die tot nu toe gegeven werden gaven maar één ODS output object (per openstaande bestemming) in het Results venster. Vaak bestaat de output uit meerdere onderdelen. De procedures voor meer geavanceerde statistische analyses bevatten sowieso meerdere output objecten. Dit betekent dan ook dat in het Results venster er evenveel iconen zullen verschijnen als er output objecten zijn.
Meerdere output objecten bij de FREQ procedure 1. Vraag bij de FREQ procedure om een chi-kwadraat test uit te voeren om na te gaan of de internationale vluchten meer vertraging kennen vergeleken bij de binnenlandse vluchten. Dit kan via de optie CHISQ in het tables statement. ods listing ; proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run;
3. Submit bovenstaande code. De Output bevat 2 Output Objecten: de eigenlijke frequentietabel enerzijds en de chi-kwadraat test anderzijds.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
165
De UNIVARIATE procedure geeft altijd meerdere output objecten De UNIVARIATE procedure is een alternatieve procedure voor PROC MEANS. Deze berekent net zoals PROC MEANS beschrijvende statistieken. De output is omvangrijker, anders geschikt en wordt weergegeven onder de vorm van verschillende output objecten. 1. Hieronder een programma om beschrijvende statistieken te berekenen voor de variabele VERTRAGING. Typ de statements in de Enhanced Editor en submit. proc univariate data = cursus.vluchten ; var vertraging ; run; 2. Output:
De UNIVARIATE procedure geeft maar liefst 5 output objecten in het Results venster die corresponderen met 5 verschillende onderdelen van de output.
SAS biedt de mogelijkheid om zelf een keuze te maken in de output objecten die je wil zien. Dit is vooral nuttig bij analyses die herhaaldelijk moeten gebeuren en waarbij je niet in alle output geïnteresseerd bent. Om een selectie te kunnen maken van gewenste output objecten, dient de naam van de output objecten gekend te zijn. Deze kan achterhaald worden via het ODS TRACE statement wat hieronder wordt besproken.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
166
Het ODS TRACE statement Het ODS TRACE ON statement geeft de namen van de output objecten in het SAS LOG venster. Het is een soort switch die wordt aangezet vóór je de PROC step uitvoert.
ODS TRACE ON
;
… SAS code … ODS TRACE OFF ;
Telkens een Output object wordt aangemaakt, zal in de log informatie over dit object worden weggeschreven. Dit gebeurt tot het moment dat er een ODS TRACE OFF getypt wordt. Per Output object wordt volgende informatie default weggeschreven naar het LOG venster:
Name
Dit is de naam van het Output object
Label
Korte omschrijving van het Output object
Template
naam van de Template Component die ODS gebruikt om de output te presenteren Pad van het Output object
Path
We zullen alleen de naam van het Output object nodig hebben.
Namen van ODS Output objecten 1. Herneem de twee PROC steps uit vorig voorbeeld. Herinner dat via Run Recall Last Submit eerder uitgevoerde programma’s kunnen worden teruggehaald in het Editor venster. Plaats vóór de proc FREQ een ODS TRACE ON en sluit het programma af met ODS TRACE OFF. ods trace on
;
proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run; proc univariate data = cursus.vluchten ; var vertraging ; run; ods trace off;
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
2. Submit het programma. De informatie over de output objecten verschijnt in het Log venster. 71 72 73 74 75
ods trace on
;
proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run;
Output Added: ------------Name: CrossTabFreqs Label: Cross-Tabular Freq Table Data Name: Path: Freq.Categorie_by_Type_vlucht.CrossTabFreqs ------------Output Added: ------------Name: ChiSq Label: Chi-Square Tests Template: Base.Freq.ChiSq Path: Freq.Categorie_by_Type_vlucht.ChiSq ------------NOTE: There were 622 observations read from the data set CURSUS.VLUCHTEN. NOTE: PROCEDURE FREQ used: real time 0.04 seconds
76 77 78 79 80 81 82
proc univariate data = cursus.vluchten ; var vertraging ; run;
Output Added: ------------Name: Moments Label: Moments Template: base.univariate.Moments Path: Univariate.Vertraging.Moments ------------Output Added: ------------Name: BasicMeasures Label: Basic Measures of Location and Variability Template: base.univariate.Measures Path: Univariate.Vertraging.BasicMeasures ------------Output Added: ------------Name: TestsForLocation Label: Tests For Location Template: base.univariate.Location Path: Univariate.Vertraging.TestsForLocation -------------
ICTS FOOCES
167
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
168
Output Added: ------------Name: Quantiles Label: Quantiles Template: base.univariate.Quantiles Path: Univariate.Vertraging.Quantiles ------------Output Added: ------------Name: ExtremeObs Label: Extreme Observations Template: base.univariate.ExtObs Path: Univariate.Vertraging.ExtremeObs ------------NOTE: There were 622 observations read from the data set CURSUS.VLUCHTEN. NOTE: PROCEDURE UNIVARIATE used: real time 0.05 seconds
83 84
ods trace off;
De FREQ procedure genereert in dit voorbeeld twee Output objecten met respectievelijk als naam CrossTabFreqs en ChiSq. De namen van de vijf output objecten die UNIVARIATE genereert zijn Moments, BasicMeasures, TestsForLocation, Quantiles en ExtremeObs.
Selectie van Output objecten Om één object of een beperkt aantal Output objecten te selecteren of weg te laten uit de SAS Output kan het ODS SELECT of het ODS EXCLUDE statement aangewend worden.
ODS < ODS bestemming> SELECT object1 object2 ….
|ALL| NONE ;
ODS < ODS bestemming> EXCLUDE object1 object2 …
|ALL|NONE ;
waarbij < ODS bestemming > bestemming waarvoor de objecten moeten worden geselecteerd of weggelaten wordt deze niet opgegeven dan geldt dit voor alle actieve bestemmingen ALL selecteren of uitsluiten van alle objecten NONE geen enkel object selecteren of uitsluiten
Een overzicht van de lijst van geselecteerde of uitgesloten objecten voor een bepaalde bestemming (of voor allemaal) kan bekomen worden via het ODS SHOW statement :
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
169
ODS < ODS bestemming> SHOW ;
De lijst van geselecteerde of uitgesloten objecten wordt gewist na elke PROC STEP of DATA STEP.
Via de PERSIST optie kan u ODS dwingen om de output objecten opgenomen in het ODS SELECT of EXCLUDE statement te behouden tot u een nieuw ODS SELECT of EXCLUDE statement opgeeft.
Selectie van output objecten in de FREQ oefening 1. Alleen de resultaten van de chi-kwadraat test weergeven bij de PROC FREQ uit bovenstaande oefeningen (alleen listing bestemming is open): ods listing exclude CrossTabFreqs
;
proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run; 2. Na uitvoer kunnen we merken dat de frequentietabel niet meer wordt getoond in het output scherm:
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
170
3. Voer PROC FREQ een tweede keer uit op een andere variabele. ods listing exclude CrossTabFreqs ods listing show ;
;
proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run; ods listing show ; proc freq data = cursus.vluchten ; tables categorie *bestemming / chisq ; run; 4. Nu (na uitvoering) bevat de output terug de beide objecten :
In het LOG venster zien we dit eveneens aan de informatie uit het ODS SHOW statement:
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
171
5. Om ook voor deze tweede PROC FREQ alleen het chi-kwadraat object te tonen dient het ODS statement te worden herhaald of kan de PERSIST optie gebruikt worden in het eerste ODS EXCLUDE statement. Deze optie moet tussen haken geplaatst worden. ods listing exclude CrossTabFreqs (persist) ; ods listing show ; proc freq data = cursus.vluchten ; tables categorie * type_vlucht / chisq ; run; ods listing show ; proc freq data = cursus.vluchten ; tables categorie *bestemming / chisq ; run; Nu wordt voor de beide PROC FREQ steps alleen het chi-kwadraat object getoond.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
172
Selectie van output objecten 1. Voorbeeld van PROC UNIVARIATE dewelke naast listing ook HTML output genereert. Je kan dit programma openen vanaf de voorbeeldenmap, het noemt HOOFDSTUK4_UNIVARIATE.SAS ods html file = 'c:\user\test.html'; ods listing select Moments (persist) Quantiles ; ods html select Testsforlocation ; proc univariate data = cursus.vluchten ; var vertraging ; run; ods html close ; proc univariate data = cursus.vluchten; var vertraging ; class type_vlucht ; run;
3. De eerste UNIVARIATE toont het Moments gedeelte en het Quantiles gedeelte in listing formaat en het Testforlocation object in HTML formaat. De tweede PROC step levert omwille van de PERSIST optie het Moments gedeelte en dit alleen in listing output.
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
173
4.7 Aanmaken van output datasets via ODS ODS OUTPUT statement Tenslotte is het ook mogelijk om via het ODS systeem de uitvoer van procedures weg te schrijven naar een nieuwe SAS dataset. Deze kan vervolgens verder verwerkt worden met SAS. Een aantal procedures voorzien via specifieke opties of statements al in de aanmaak van een output data set, maar de mogelijkheden zijn beperkt. Vaak kan slechts een onderdeel van de output in een bestand bewaard worden of worden net verschillende onderdelen van de output in één dataset gebracht. Daarnaast is bij tal van procedures de mogelijkheid om naar een SAS dataset te schrijven niet eens voorzien. Via het ODS OUTPUT statement kan bijna om het even welk getal/resultaat van de procedure output in een nieuwe SAS dataset worden bewaard. De syntax is als volgt:
ODS OUTPUT
output-object = SAS-dataset
;
Verwijzen naar een output object kan via de naam (Name) of het pad (Path). Deze informaties kunnen opgevraagd worden via ODS TRACE ON (cf. 4.6 Selectie van output objecten). De SAS dataset ( aan de rechterkant van het = teken) is de naam van de SAS dataset waarin we de output willen bewaren en is dus een zelf te kiezen naam.
De selectielijst voor de Output bestemming wordt gewist zodra SAS een RUN of een QUIT statement tegenkomt.
Output datasets via ODS
1. Gezien we de namen van de ODS output objecten nog kennen van vorige oefening typen we onmiddellijk een ODS OUTPUT statement waarin we vragen om de momententabel (object met naam Moments) en het gedeelte met toetsen van hypothesen (Testsforlocation) te willen bewaren in een SAS dataset. ods listing close; ods output Moments = Momenten Testsforlocation = ToetsenVanHypothesen ; proc univariate data = cursus.vluchten; var vertraging ; run; 2. Voer het programma uit en kijk in het Results venster naar de resultaten:
ICTS FOOCES
Fout! Gebruik het tabblad Start om Heading 1 toe te passen op de tekst die u hier wilt weergeven. Fout! Gebruik het tabblad Start om Heading 2 toe te passen op de tekst die u hier wilt weergeven.
174
3. Bemerk dat per output dataset een icoon wordt voorzien in het SAS Results venster. Dubbel klikken op het icoon opent de SAS dataset in het Viewtable venster. Uiteraard kan de inhoud van de aangemaakte datasets ook via de PRINT procedure opgevraagd worden. ods listing ; proc print data = Momenten ; run; Output: Obs
VarName
1 2 3 4 5 6
Vertraging Vertraging Vertraging Vertraging Vertraging Vertraging
Obs 1 2 3 4 5 6
Label1
cValue1
N Mean Std Deviation Skewness Uncorrected SS Coeff Variation
Label2 Sum Weights Sum Observations Variance Kurtosis Corrected SS Std Error Mean
622 4.05790423 7.09586285 -0.5591169 41510.3554 174.865212
cValue2 622 2524.01643 50.3512696 0.51505811 31268.1384 0.28451818
nValue1 622.000000 4.057904 7.095863 -0.559117 41510 174.865212
nValue2 622.000000 2524.016433 50.351270 0.515058 31268 0.284518
proc print data =ToetsenVanHypothesen ; run; Output : Obs
VarName
1 2 3
Vertraging Vertraging Vertraging
Test Student's t Sign Signed Rank
De output van de
Testlab t M S
Stat 14.26237 131 57914.5
pType
pValue
Mu0
Pr > |t| Pr >= |M| Pr >= |S|
<.0001 <.0001 <.0001
0 0 0
PRINT procedure kan NIET via ODS naar een output dataset geschreven worden.
ICTS FOOCES