ODS Das Output Delivery System Eine Einführung Grischa Pfister Der Referent Grischa Pfister Seit 1993 SAS aktiv Arbeitsfelder Anwendungsentwicklung AF, IntrNet, Java Data Warehousing SAS9 BI-Architektur Schulungen Base AF Java BI-Architektur 1
Einleitung Zeitrahmen 14:00 18:00 Uhr Pausen ca. 15:30 15:45 und 16:45 17:00 Uhr? Ablauf Vortrag Anwendungsbeispiele Fragen Immer und jederzeit Agenda Das Konzept Grundlegende Beispiele Output Objekte Der Output Kanal Ods Destinations Printer / PDF / RTF HTML Ausgabe Ods und Graphiken Ods Styles Ods und Reporting Prozeduren Table & Style Templates Neues in V9 2
Literaturhinweise Bernadette Johnson: Instant ODS: Style Templates for the SAS Output Delivery System (Stand 8.2) Lauren Haworth: Output Delivery System: The Basics (Stand 9.1.3) Sunil Gupta: Quick Results with the Output Delivery System (Stand 9.1.3) Literaturhinweise SAS Hilfe SAS Products Base SAS Output Delivery System support.sas.com Communities -> Base SAS ODS generell: http://support.sas.com/rnd/base/index-odsresources.html ODS MARKUP Resources: http://support.sas.com/rnd/base/topics/odsmarkup/ SUGI-Proceedings http://support.sas.com/usergroups/sugi/proceedings/ 3
Das Konzept SAS-Output vor ODS Zwei Formen Listing im Output-Fenster Ausgabe-Tabellen Nachteile Manche Prozeduren erzeugen keine Tabellen Nicht alle Informationen in Tabellen Statisch Nur Proportional-Schriftarten Keine echte Tabellenstruktur Übernahme in Textverarbeitung, Tabellenkalkulation, Graphikprogramme schwer oder gar nicht möglich Hoher Nachbearbeitungsaufwand 4
SAS-Output mit ODS WYSIWYG Alles was im OUTPUT-Fenster erscheint steht im ODS zur Verfügung Alle Informationen aller Prozeduren Parallelisierung des Output Ergebnisse werden an viele Kanäle gleichzeitig geliefert Gliederung des Output Prozedur-Output wird in Objekte zerlegt Zugriff auf jedes einzelne Objekt möglich ODS Ausgabe-Kanäle Listing Output-Fenster Output SAS-Tabelle HTML Dokument für WWW PDF Dokument für Acrobat Reader RTF Dokument für Textverarbeitung Printer Systemdrucker PS Postscript Tagsets Markup Languages -CSV -XML -ExcelXP 5
Funktionsweise des ODS Listing Daten- Komponente Kanal Listing Output Style SAS-Tabelle HTML Dokument Table Template Output-Objekt HTML RTF PDF PRINTER... Template RTF Dokument PDF Dokument Ausdruck... ODS-Syntax Globale Statements Voll batch-fähig Schalterprinzip Kanal wird geöffnet Output von Prozeduren/Data Steps Kanal wird geschlossen Ergebnis ist betrachtbar 6
Öffnen und Schließen von ODS-Kanälen Öffnen eines Kanals Ods Kanal; Ods Kanal File = pfad ; Ods Kanal output-objekt = SAS-Tabelle; Schließen eines Kanals Ods Kanal Close; Ods _all_ Close; Grundprinzip Es muss mindestens ein Kanal geöffnet sein Ansonsten Warning im LOG-Fenster Grundlegende Beispiele 7
Ods Listing Ein-/Ausschalten Ods Listing;... Ods Listing Close; Beispiel01.sas Ods Html Ein-/Ausschalten Ods Html File = fileref pfad ;... Ods Html close; Beispiel02.sas 8
Ods Pdf Ein-/Ausschalten Ods Pdf File = fileref pfad ;... Ods Pdf Close; Beispiel03.sas Ods Rtf Ein-/Ausschalten Ods Rtf File = fileref pfad... Ods Rtf Close; Beispiel04.sas 9
Ods Printer/PS Ein-/Ausschalten Ods Printer <Display>; Ods Ps File = fileref pfad ;... Ods Printer/Ps Close; Beispiel05.sas Mehrere Kanäle gleichzeitig verwenden Unterschiedliche Kanäle Ods Pdf File = fileref pfad ; Ods Html File = fileref pfad ;... Ods _all_ Close; Beispiel06.sas 10
Mehrere Kanäle gleichzeitig verwenden Gleiche Kanäle Ods Html (id=1) File = fileref pfad ; Ods Html (id=2) File = fileref pfad ;... Ods Html (1) Close;... Ods Html (2) Close Beispiel07.sas Ods Grundeinstellungen Tools -> Options -> Preferences Tabber Results Ods Listing Ergebnisse als HTML Style = default Web-Browser Umstellen unter Tabber Web Direkte Anzeige der Ergebnisse 11
Output Objekte Output Objekte Ods teilt Prozedur-Output in Objekte ein Jedes Objekt ist identifizierbar Jedes Objekt ist einzeln ansprechbar Anzahl der Output Objekte ist abhängig von Prozedur Prozedur-Optionen By-Gruppen 12
Output Objekte Identifizieren von Output Objekten Ods Trace On;... Ods Trace Off; Inhalt des Trace-Satzes Name des Output Objektes Label des Output Objektes Name des verwendeten Table Templates Pfad des Output Objekts Beispiel08.sas Results-Fenster zeigt Output Objekte an Auswahl von Output Objekten Select-/Exclude-Liste Enthält Auswahl von Output Objekten Eine globale Liste Eine Liste für jeden aktiven Kanal Anzeigen der Select-/Exclude-Liste Ods <Kanal> Show; Dabei muss der Kanal muss aktiv sein Beispiel09.sas 13
Auswahl von Output Objekten Auswahl von Output Objekten Ods <Kanal> Select ods-objekt <ods-objekt...>; Ods <Kanal> Exclude ods-objekt <ods-objekt...>; Ods <Kanal> (Select Exclude) (All None); Dabei kann ods-objekt sein Name aus Trace-Satz Pfad aus Trace-Satz Label aus Trace-Satz Mischung aus Label und Pfad Beispiel10.sas Voreinstellungen der Auswahllisten Globale Select-/Exclude-Liste Select All Alle Bericht-Kanäle Select All Output-Kanal Exclude All Beispiel11.sas 14
Gültigkeitsdauer von Auswahllisten Gültigkeitsdauer der Auswahl Nachfolgende Prozedur Option Persist macht Auswahl eines Objektes dauerhaft muss mit neuem Statement überschrieben werden Ods <Kanal> (Select Exclude) ods-objekt(persist);... Ods <Kanal> Select All; Beispiel12.sas Output Kanal 15
Ods Output Ein-/Ausschalten Ods Output ods-objekt = SAS-Tabelle...;... <Ods Output Close;> Beispiel13.sas Auftrennen in mehrere Tabellen Verarbeitung von By-Gruppen Standardverhalten: alle By-Gruppen in eine Tabelle Match_all-Option: Ods Output ods-objekt(match_all<=mvar>)= SAS-Tabelle; jede By-Gruppe in eigene Tabelle automatische Benennung mvar enthält Namen der erzeugten Tabellen Beispiel14.sas 16
Verarbeiten mehrerer Prozedurausgaben Verarbeiten mehrerer Prozeduren Match_all + Persist-Option Ods Output ods-objekt(match_all<=mvar <Persist=run proc>>) = SAS-Tabelle;... Ods Output Close; Erhält Benennungsschema Beispiel14a.sas ODS Destinations Printer / PDF / RTF 17
Seitenkontrolle Grundeinstellung Jede Prozedur beginnt neue Seite Innerhalb der Prozedur selbst keine Eingriffsmöglichkeit Seitenumbrüche steuern Startpage-Anweisung Ods Kanal Startpage = off; Schaltet automatischen Seitenumbruch nach Prozedur aus Ods Kanal Startpage = on; Schaltet automatischen Seitenumbruch nach Prozedur ein Ods Kanal Startpage = now; In Verbindung mit Ods Startpage off erzwingt Seitenumbruch an bestimmter Stelle Beispiel15.sas Allgemeines Layout Optionen für die Seitengestaltung Title Titel Footnote Fußnoten [no]center linksbündig [no]number keine Seitenzahlen [no]date kein Datum Orientation = portrait landscape Hochformat Querformat papersize = Iso A4 (x,y) Seitengröße [left right top bottom]margin = n Randeinstellungen Funktionieren aber nicht immer mit allen Kanälen... Beispiel16.sas 18
Titel und Fußnoten Title & Footnote Ähnlich SAS/GRAPH verwendbar Font = Schriftart Height = Schriftgröße Color = Farbe Justification = Ausrichtung Beispiel17.sas Inhaltsverzeichnis Option contents Erstellt Inhaltsverzeichnis für PDF / RTF In Word alles Markieren (Strg + A) Felder aktualisieren (F9) 19
Inline-Formatierung Ods Escapechar = Zeichen ; Definiert Zeichen als Beginn einer Escape-Sequenz Standard Escape-Sequenzen [arg]n [arg] Leerzeilen einfügen S={} Style-Attribute {super text} hochgestellt {sub text} tiefgestellt R/[RTF PDF HTML] Roh-Text für eine Destination InlineFormatierung01.sas Paginierung Verschiedene Platzhalter {pageof} page X of Y (nur RTF) {thispage} aktuelle Seitenzahl {lastpage} höchste Seitenzahl 20
PDF Spezifika Notoc NoPdfNote Kein Inhaltsverzeichnis Keine Annotations Style-Attribut flyover wird in PDF Note umgewandelt Columns = n Ausgabe in mehrere Spalten Text = Einfügen von Text V9 Compress = [0 9] RTF Spezifika BodyTitle Author = Title = Columns = n Text = Titel im Text Angabe des Autors Angabe des Titels Ausgabe in mehrere Spalten Einfügen von Text RTF-spezifische Felder verwenden Title/Footnote beginnt mit {, endet mit } R/RTF Anweisung {Seite \field{\*\fldinst PAGE }} http://support.sas.com/rnd/base/topics/ templatefaq/template_rtf.html http://msdn.microsoft.com Nach rtf specification suchen InlineFormatierung02.sas 21
HTML Ausgabe Ods HTML Erstellen ganzer Web-Sites im Batch Statische Reports als HTML Automatische Erzeugung von Framesets Verwendung von Cascading Style Sheets Verlinken verschiedener Seiten Interaktive Graphiken Graphiken mit Hyperlinks Aufsplitten der Ergebnisse auf mehrere Dateien 22
Ods HTML Was ist ein Frameset? Konzept in HTML Zeigt gleichzeitig mehrere HTML-Dateien an Unterteilt die Anzeige in verschiedene Bereiche (Frames) Mit Ods möglich Inhaltsverzeichnis Seitenverzeichnis Hauptseite Ods HTML Erstellen eines Frameset mit ODS Ods Html Path = verzeichnis (Url = none) Body = name1.html Contents = name2.html Page = name3.html Frame = name4.html ; Path: Pfad unter dem alle Dateien angelegt werden (Url = none): Hyperlinks werden relativ angelegt Body: Hauptseite Contents: Inhaltsverzeichnis Page: Seitenverzeichnis Frame: Html-Seite, die den Frameset enthält Beispiel18.sas 23
Unterstützung von Cascading Style Sheets Hintergrund HTML: tag-gesteuerte Layoutanweisungen, ASCII Dateien sollen möglichst klein sein Wie wird Layout definiert? Für jedes Element einzeln Definition von Klassen (Cascading Style Sheet) Verschiedene Möglichkeiten CSS zu verwenden Ods Html... Css; eingebettetes Stylesheet Ods Html... Stylesheet = name.css ; CSS wird erstellt Ods Html... Stylesheet = (Url= ); vorhandenes Stylesheet wird benutzt Beispiel19.sas Aufsplitten des Output HTML-Dateien sollten möglichst klein sein Grundeinstellung: aller Prozedur-Output landet in einer Datei NewFile-Option Ods Html... NewFile = Output Page Proc; Erstellt neue Dateien für Jedes Output Objekt Jede logische Seite Jede Prozedurausgabe Beispiel20.sas 24
Eingriffsmöglichkeiten in das Inhaltsverzeichnis Ods Proclabel text ; Ändert die Hauptüberschrift Option Contents = text bei den Prozeduren Print, Report und Freq, Tabulate (hier auch als Option im Table-Statement) Ändert die Unterüberschrift(en) Ods Noptitle; Unterdrückt den Prozedurspezifischen Titel Beispiel21.sas HTML direkt verwenden Titel und Fußnoten dürfen HTML-Code enthalten 1. Zeichen muss < sein!! Beispiel22.sas Corporate Design nutzen Notop Keine HTML-Startsequenz Nobot Keine HTML-Schlusssequenz Beispiel23.sas 25
Ods und Graphiken Wie erstellt SAS Grafiken? Device-Konzept Grafik wird zunächst unabhängig erzeugt Anschließend von Device interpretiert Problem Schriftarten V6 Device enthält Übersetzungsliste von SAS-spezifischen in True Type Font-Namen V8 Bestimmte Devices können TTF-Namen erkennen Die vom ODS verwendeten Devices nicht! 26
Ods, Grafiken und True Type Fonts in V9 Free Type Library für Schriftarten Werden von ODS-Devices verwendet Registrieren von TTF in SAS Registry Schriftarten stehen zur Verfügung Proc Fontreg Kommando REGEDIT Core/Printing/Freetype/Fonts Unterstützende Devices SASEMF, GIF, JPEG, PNG Mehr zu diesem Thema: TS 674: An Introduction to Exporting SAS/Graph Output to Microsoft Office SAS Release 8.2 and higher Beispiel24.sas Grafiken in HTML HTML Pixel-Graphiken in GIF- bzw. JPEG-Format Werden als Referenz in Seite integriert (<Img src= >) Ods Html Gpath = verzeichnis (Url=none); setzt das Verzeichnis, in dem Graphiken gespeichert werden SAS/GRAPH Treiber JPEG GIF Goptions xpixels = n ypixels = n [no]transparency Beispiel25.sas 27
Spezielle Devices Spezielle SAS/GRAPH Treiber ActiveX Java Interaktive Graphiken mit diversen Möglichkeiten wie Anzeige von Werten Rotieren Strg + LMB Verschieben Alt + LMB Zoomen Shift + LMB Selektion Strg + Shift + LMB Umstellen des Graphiktyps Kontextmenü... Beispiel26.sas SAS/GRAPH & ODS Html Erweiterung der Graphik-Prozeduren Graphiken mit Hyperlinks versehen Option Html = variable in den verschiedenen Statements Schritte zum Erstellen von gelinkten Graphiken 1. Tabelle mit Drillvariable erzeugen variable = href = name.html ; 2. Graphik erzeugen 3. Die Seiten erzeugen, auf die verwiesen wird Beispiel27.sas 28
ODS Styles Abstrakte Beschreibung von ODS-Elementen Dokument Inhaltsverzeichnis Tabelle Zelle Layoutangaben Farben Schriftarten (Größe, Gestaltung) Tabellengestaltung (Abstände, Ränder) Beschriftung (z.b. des Inhaltsverzeichnisses) Werden immer verwendet HTML -> default RTF -> rtf PDF -> printer PRINTER/PS -> printer 29
Mitgelieferte Styles Default D3d Brick statdoc Minimal sasweb barrettsblue... Tools -> Options -> Preferences -> Results Tabber Verwendung von Styles Ods Kanal Style = name; Beispiel28.sas ODS und Reporting Prozeduren Proc Print, Proc Report, Proc Tabulate 30
Neue Style-Option Style = {style-anweisung...}; Style(element) = {style-anweisung...}; Überschreibt Layoutanweisungen des gewählten Styles Style Anweisungen (Auswahl) Background = Foreground = bordercolor = Schriftart spezifisch Farbe Farbe Farbe Font_face= Schriftart Font_size= Schriftgröße Font_weight= Schrift-Gewichtung (normal/fett) Font_style= Darstellung (italic=kursiv) Zellenlayout Cellheight= Zellenhöhe Cellwidth= Zellenbreite Cellpadding= Randabstand innerhalb Zelle Cellspacing= Abstand zwischen Zellen Just= horizontale Ausrichtung Vjust= vertikale Ausrichtung Graphische Elemente BackgroundImage= Hintergrundbild PreImage= Bild vor Objekt PostImage= Bild nach Objekt HTML spezifisch PreHtml= PostHtml= Url= Flyover= 31
ODS & Proc Print Output in Elemente unterteilt Jedes Element kann einzeln formatiert werden Style-Angaben für Gesamt-Tabelle Spaltenüberschriften Obs-Spalte Datenbereich Einzelne Spalte Einzelne Zelle (Ampel-Funktion) Beispiel29.sas ODS & Proc Report Globale Angaben als Optionen in Prozeduraufruf Header Column Spaltenbezogene Angaben als Optionen im Define-Block Header Column Beispiel30.sas 32
ODS & Proc Tabulate Verwenden der Style-Option in verschiedenen Statements Class Classlev Var Keyword Box-Option Table-Statement Beispiel31.sas Table & Style Templates 33
Table Template Grund-Layout Aufteilung in Spalten Spaltenbeschriftung Zahlenformatierung Kann auch Style-Anweisungen enthalten Style Template Layout der Elemente Abhängig vom Kanal Objekt-orientierter Ansatz Default Printer PDF RTF [...]Printer Statdoc RTF D3d,... 34
Verwaltung von Table & Style Templates Ods Template Viewer Kommando OdsTemplate Results-Fenster Hierarchische Organisation in MT itemstore Defaults: Sashelp.Tmplmst (schreibgeschützt) Eigene: Sasuser.Templat Anlegen eigener itemstores mit Proc Template Ods Suchpfad Ods Path Show; Ods Path libref.itemstore(modus)...; modus = read update write Table Templates verändern Beispiel Proc Univariate: Extreme Observations Beschriftung eindeutschen Wird in Sasuser.Templat gespeichert Beispiel32.sas 35
Style Templates anpassen Neuen Style ableiten Gewünschte Änderungen vornehmen Aufbau des Styles Default Definition von Schriftarten Definition von Farben Definition der einzelnen Elemente Hierarchie in OnlineDoc beschrieben Base SAS Software -> Guide to the SAS Output Delivery System -> Reference -> The TEMPLATE Procedure -> Concepts Beispiel33.sas Data Step Reporting & Table Templates Mit Table Templates Schablonen entwerfen Spaltenlayout Beschriftung Style-Anweisungen Ampelfunktion mit Hilfe von Cellstyle-Anweisung Style-Anweisung + Expression-Funktion Style-Anweisung + Format Berechnete Spalten Verändern von Werten Beispiel34.sas Beispiel38.sas 36
Neues in V9 Ods Markup Neue Destination Stellt Event-Modell zur Verfügung 37
Event = Ereignis Start & finish ODER zustandslos Mit Trigger event können eigene Events aufgerufen werden Verhalten in Tagsets zusammengefasst Z.B. Tagset Csv Tagsets01.sas Tagsets als Informationsquelle Informationen über Style-Elemente anzeigen Style_popup Style_display namedhtml Informationen über Events anzeigen Event_map Volle Freiheit für Benutzer aber hohe Komplexität http://support.sas.com/rnd/base/topics/odstagsets/ Eric Gebhart: MARKUP: The Power of Choice and Change. Sugi 27, Advanced Tutorials Tagsets02.sas 38
ODS Tagset ExcelXP Export von SAS nach Excel (ab Excel 2002) XML nach Microsoft-Standard Neueste Version http://support.sas.com/rnd/base/ topics/odsmarkup/ ODS Tagset ExcelXP Features Benennung der Tabellenblätter Je Tabelle ein Tabellenblatt in Excel By-Gruppen, Prozedur, Beschriftung als Header/Footer oder im Blatt Überschriften (Spalten und Zeilen) fixieren Automatische Spaltenfilter Formatierung von Zahlenwerten mit Excel-Formaten Verwendung von Excel-Formeln 39
ODS Tagset ExcelXP Aufruf Ods Tagsets.ExcelXP file= path" options(optionen); Ods Tagsets.ExcelXP Close; Dokumentation ist in Style enthalten Ods Tagsets.ExcelXP file= path options(doc= help ); ExcelXP001.sas ODS Tagset ExcelXP Steuerung über Optionen Bei Öffnen des ODS Kanals Vor einer individuellen Tabelle options(name= value <name= value >) Ods Tagsets.ExcelXP file= path options(optionen); Ods Tagsets.ExcelXP options(optionen); Ods Tagsets.ExcelXP Close; 40
ODS Tagset ExcelXP Ausgewählte Optionen Seitenausrichtung orientation = portrait landscape Größe der Anzeige in Excel zoom = n ExcelXP02.sas ODS Tagset ExcelXP Excel Features frozen_headers = no yes frozen_rowheaders = no yes auto_filter = none all column startcol endcol nur für mehrere aufeinander folgende Spalten ExcelXP03.sas 41
ODS Tagset ExcelXP Formatierung mit Excel-Formaten Führende Nullen, feste Nachkommastellen Style-Anweisung tagattr= Excel-Format 0 alle signifikanten Ziffern # nichtsignifikante Ziffern tagattr= 000.00 bzw. tagattr= format:000.00 tagattr= ###.###.###.0# tagattr= [Red][<=100];[Blue][>100] ODS Tagset ExcelXP Excel Formeln verwenden I Relative Spalten- und Zeilenbezüge R[+/-n]C[+/-n] RC[-1] Wert der direkten linken Spalte RC[-2] Wert der vorletzten Spalte R[-1]C[-1] Wert der oberen linken Zelle Alphanumerische Variable bilden Länge beachten! Var = =Ausdruck 42
ODS Tagset ExcelXP Excel Formeln verwenden II Style-Anweisung tagattr= formula:formel Numerische Variable bilden (var =.)!! Englische Excel-Funktionen verwenden!! [ExcelXPnn.sas] Ods Document http://support.sas.com/rnd/base/topics/odsdocument/ Experimentell in V8.2, produktiv in V9 Speichern und Wiedergeben von Output-Objekten Z.B. Ändern der Reihenfolge Wird als Membertype Itemstore gespeichert Ods Document Name = <Lib.>Itemstore(mode); 43
Proc Document Proc Document Name= <Lib.>Itemstore; List / Levels = all; Replay <object <, object>; Make directory; Setlabel directory text ; Dir directory ^^; Copy object To ^;... Run; Quit; ^ Dieses Verzeichnis (.) ^^ Ein Verzeichnis hoch (..) OdsDocument01.sas Ods Data Step Object Objektorientierte Schnittstelle im Data Step Freie Programmierung von Tabellenlayouts Ods Layout Grafischer Satz von Seiten Definitoin von Ausschnitten in die Tabellen/Grafiken eingefügt werden 44
Weitere Fragen oder Anregungen? g.pfister@icasus.de 45