C. Ortseifen: ODS in SAS V8 4. August 2000 Das Output Delivery System (ODS) der SAS Version 8.0 SAS-Benutzertreff am URZ 4. August 2000 Inhalt 1. 2. Übersicht Erzeugung von a. b. c. 3. HTML RTF Output Tabellen Literatur 1. Übersicht über ODS Neuerung der SAS Version 8 Erweiterung der Ausgestaltungsmöglichkeiten des SAS Outputs Methode, um SAS Outputs in HTML oder RTF Format zu konvertieren Gezielter Zugriff auf einzelne Teile des Outputs SAS-Benutzertreff am URZ 1 C. Ortseifen: ODS in SAS V8 4. August 2000 Output Objekte Der Kern von ODS sind die Output Objekte. Jede SAS Prozedur legt ein oder mehrere Output Objekte an (Proc Univariate z.B. fünf Output Objekte). Im Result-Fenster wird für jedes Output Objekt ein Link eingetragen Sie bestehen aus einer Daten- und einer Template-Komponente sowie Informationen über die Prozedur, die den Output erzeugt hat. Output Objekte (2) Datenkomponente: Zahlen und Texte, aus denen sich die Tabelle oder die Grafik zusammensetzt. Template: Anweisungen und Attribute, die beschreiben, wie ODS die Daten darstellt. ODS kombiniert die Daten mit dem Template. Mit der Prozedur TEMPLATE können diese Templates modifiziert werden. Ausgabeformen Die Output Objekte können ausgegeben werden in Form von: Standard SAS Listing Listing HTML HTML RTF (Experimental) RTF Output Data Sets Output PS PRINTER In 8.1: PDF, XML PRINTER In 8.2: LaTeX, PCL PRINTER SAS-Benutzertreff am URZ 2 C. Ortseifen: ODS in SAS V8 4. August 2000 Destinations öffnen und schließen Öffnen einer Destination: Schließen einer Destination: Standard (Default): Listing geöffnet die anderen geschlossen ods listing; ods html <Optionen>; ods output <action>; ods <destination> close; Output Objekte ein-/ausschließen Selektion (select) und Ausschluss (exclude) ods <Destination> <Option>; Optionen: select <Auswahl> select all select none exclude <Auswahl> exclude all exclude none Beispiele ods html exclude all; ods listing exclude all; ods exclude all; SAS-Benutzertreff am URZ 3 C. Ortseifen: ODS in SAS V8 4. August 2000 Gezielte Auswahl ods listing select BasicMeasures; proc univariate data=kurs.blutbild; var alter; run; run Selektion gilt nur für diesen Prozedurschritt ! Es sei denn: ods listing select BasicMeasures (persist); proc univariate data=kurs.blutbild; var alter; run; run Anweisung ODS SHOW Die Einstellungen der Destinations kann man sich mit ods <destination> show; anzeigen lassen. Anweisung ODS TRACE Jedes Output Objekt erhält einen Namen. Mit der Anweisung ODS Trace werden diese im Log-Fenster angezeigt. ods trace on; proc univariate data=kurs.iris; var sl sw; run; run ods trace off; SAS-Benutzertreff am URZ 4 C. Ortseifen: ODS in SAS V8 4. August 2000 Output Added: ------------Name: Moments Label: Moments Template: base.univariate.Moments Path: Univariate.SL.Moments ------------Output Added: ------------Name: Label: Template: Path: BasicMeasures Basic Measures of Location and Variability base.univariate.Measures Univariate.SL.BasicMeasures Gleichnamige Output Objekte ods listing select quantiles moments; zeigt alle Output Objekte mit den Namen an. ods listing select sl.moments; zeigt nur die Momente von sl an. 2.a Destination HTML erzeugt bis zu vier Files: Body= eigentliche Prozedurausgabe (Table-Tags, Img-Tags) Contents= Inhaltsangabe mit Links zu einzelnen Output Objekten in Body Page= Links zu einzelnen Seiten in Body Frame= Web-Seite, die alle erzeugten Files anzeigt SAS-Benutzertreff am URZ 5 C. Ortseifen: ODS in SAS V8 4. August 2000 Beispiel ods html file='body.htm' contents='contents.htm' frame='frame.htm'; proc means data=kurs.iris; run; run ods html close; HTML Optionen Path= URL= Ordner, wo Files abgelegt werden Suboption, in Klammern Links über URL, statt physik. Pfad No_top_matter, no_bottom_matter unterdrückt HTML-Tags am Anfang und Ende des Files Anchor= selbstbestimmte Anker für Output Objekte filename web 'f:\_temp'; ods listing close; ods html path = 'f:\_temp' body = web (no_bottom_matter) contents = 'content.htm' frame = 'frame.htm'; proc univariate data=kurs.iris; var sl sw; run; run ods html close; filename web 'f:\_temp\body.htm' mod; data _null_; file web; put '<h3> Kommentar nach der ersten Prozedur. </h3>'; run; run SAS-Benutzertreff am URZ 6 C. Ortseifen: ODS in SAS V8 4. August 2000 ods html body=web (no_top_matter no_bottom_matter); proc freq data=kurs.iris; tables blume; run; run ods html close; data _null_; file web; put '<h3> Noch ein Kommentar! </h3>'; run; run ods html body=web (no_top_matter); ods html close; HTML Optionen (2) Newfile= Getrennte Seiten (Files) für jedes Output Objekt none, output, page, proc Page= Mit der Option Newfile= wird eine weitere HTML-Datei angelegt, die Links zu den Seiten enthält. HTML mit Styles ods html file='body.htm' contents='contents.htm' frame='frame.htm' style=Styles.Beige; proc ... ods html close; Styles sind Elemente mit Attributen für Farbe, Schriftart etc. für die HTML-Seiten. SAS-Benutzertreff am URZ 7 C. Ortseifen: ODS in SAS V8 4. August 2000 Styles Styles werden mit Templates in einem ODS Template Store (Erweiterung sas7bitm) gespeichert. Der Template Pfad bestimmt den Ort, wo ODS nach Styles und Templates sucht. ods path show; Die Prozedur TEMPLATE erlaubt, Templates und Styles aufzulisten. proc template; list styles; run; Cascading Style Sheets Der reine HTML-Text ist recht gross und unübersichtlich. (Das ist ein Tribut an die Lesbarkeit der HTML-Files mit beliebigen Browsern.) Optionen: css stylesheet="style.css" Ist experimentell in V8. Änderungen im Contents Files 1. 2. 3. Table of Contents Label - Style-Element ContentTitle The XXX Procedure Label - Style-Element ContentProcName - Anweisung ODS Proclabel Label für jedes Output Objekt abhängig von Prozedur Option Contents= Option Description= Option Contents_Label SAS-Benutzertreff am URZ 8 C. Ortseifen: ODS in SAS V8 4. August 2000 1. Table of Contents Anlegen eines neuen Styles mit Proc Template: proc template; define style styles.ContentsChanges; parent=styles.default; style ContentTitle from ContentTitle / pretext = 'Inhaltsverzeichnis'; end; run; run 2. The XXX Procedure Style-Element ContentProcName: proc template; define style styles.ContentsChanges; parent=styles.default; style ContentProcName from ContentProcName / pretext = 'Ergebnis der Prozedur ' posttext= '.'; end; run; The XXX Procedure (2) Anweisung ODS Proclabel ods proclabel 'UNIVARIATE ist mehr !'; !'; proc univariate data=kurs.iris; var sl; run; run SAS-Benutzertreff am URZ 9 C. Ortseifen: ODS in SAS V8 4. August 2000 3. Label für einzelne Output Objekte Proc Tabulate, Print, Freq: Option CONTENTS der Anweisung Proc SAS/GRAPH Prozeduren: Option DESCRIPTION Andere Prozeduren: Option CONTENTS_LABEL von Proc Template proc print data=kurs.iris contents= contents='Fishers Iris-Daten'; run; run proc gplot data=kurs.iris; plot sl*sw / description= description='Fishers IrisDaten - Plot von Sl*Sw'; run;quit run quit; quit proc template; edit base.sql; mvar cont; contents_label=cont; end; run; run %let cont=Kennwerte von SL; proc sql; select * from kurs.iris; quit; quit Eigene Styles definieren Wenn man nicht einen vorhandenen Style kopieren möchte, sondern einen Style komplett neu definieren will, findet man Infos auf dem SAS Server unter http://www.sas.com/rnd/base/topics/ style-template/style.html SAS-Benutzertreff am URZ 10 C. Ortseifen: ODS in SAS V8 4. August 2000 2.b RTF Ausgaben Experimental in V8 (Produktiv in V 8.1) RTF Destination ods rtf file='iris.rtf'; proc print data=kurs.iris; run; run ods rtf close; Besonderheiten von RTF Word unterstützt nur 16 Farben. ODS versucht, die Farben darauf abzubilden. Tabellen werden horizontal angeordnet, vertikal wird keine Rücksicht genommen. D.h. Hinweise von Proc Tabulate auf Continuation werden nicht unterstützt. Grafiktyp bei RTF ist PNG. 2.c Destination OUTPUT Erzeugung von SAS-Tabellen aus Prozedurausgaben (Ersatz für Anweisung OUTPUT, Option OUT=) ods output <Option>; Optionen: show clear close zeigt die Einstellungen entspricht: exclude all schließt die Destination SAS-Benutzertreff am URZ 11 C. Ortseifen: ODS in SAS V8 4. August 2000 Erzeugung von SAS Tabellen ods output <Output Objekt>=SAS-Tabelle; Das Output Objekt kann man mit ODS TRACE ausfindig machen. Erzeugt wird eine SAS-Tabelle. Beispiel ods output Moments=Momente; proc univariate data=kurs.iris; var sl sw; run; run NOTE: The data set WORK.MOMENTE has 12 observations and 7 variables. NOTE: There were 150 observations read from the dataset KURS.IRIS. Gleichnamige Output Objekte Treten mehrere gleichnamige Outputobjekte auf (etwa für die verschiedenen Variablen), versucht ODS, diese in eine gemeinsame Tabelle zu verpacken. Bei Problemen erscheint eine Warnung. Abhilfe schafft die MATCH_ALL Option, die lauter verschiedene Tabellen anlegt. SAS-Benutzertreff am URZ 12 C. Ortseifen: ODS in SAS V8 4. August 2000 ods trace output; proc glm data=kurs.iris; model sl=sw; quit; quit ods listing close; ods output ModelAnova(match_all=mvar)=model; proc glm data=kurs.iris; model sl=sw; quit; quit data neu; set &mvar; run; run Hinweis zu Match_All ods output BasicMeasures Moments (match_all) = Momente; erzeugt nur für die Moments getrennte Tabellen, nicht für BasicMeasures. 4. Literatur zu ODS A. Christmann:Einführung in ODS im SAS-Ah (www.urz.uni-heidelberg.de/statistik/sas-ah) L. Bryant et.all: ODS, YES! Odious, NO! SUGI 25, 2000, Paper 149 W.F. Heffner: ODS: The Data Step Knows SUGI 23, 1998, Paper 21 Ch. Olinger: Twisty Little Passagers. All Alike – ODS Template Exposed. SUGI 24, 1999, Paper 56 Ch. Olinger: ODS for Dummies SUGI 25, 2000, Paper 64 alle unter: www.sas.com/usergroups/sugi/proceedings/ SAS-Benutzertreff am URZ 13