Tipps & Tricks Dr. Carina Ortseifen Universitätsrechenzentrum Heidelberg Grischa Pfister icasus GmbH Heidelberg Was Sie erwartet 1. SAS/Enterprise Guide Sechs Stolperfallen 2. Temporäre Buffer unter SAS 3. Verzeichnisinhalte einlesen 4. Zugriff auf Excel- und Access-Tabellen 5. Ende gut, alles gut Grafiken mit True Type Fonts und ODS 6. ODS RTF 7. Java im Data Step 1
SAS/Enterprise Guide Sechs Stolperfallen Copyright 2003, SAS Institute Inc. All rights reserved. 1. Installation Die SAS/EG Software ist ein eigenständiges SAS/Modul, auf eigener CD (evtl. auch zweien). Ab SAS 9.1 ist die SAS/EG Software lizenzrechtlich - Bestandteil von Base SAS. Aber: Mit der Installation von Base SAS wird die SAS/EG Software nicht mitinstalliert, auch nicht im Menü angefordert. 2
2. Nicht immer Windows gemäß Änderungen an Werten in SAS-Tabellen sind sofort wirksam und nicht rückgängig zu machen. Sichtbar wird dies mit SAS/EG 3.0 z.b. darin, dass die aktive Tabelle nicht explizit gespeichert werden muss, da Änderungen stets direkt gespeichert werden. 3. Projekte a) Übertrag in neuen Ordner/auf anderen Rechner: Projekt enthält nur den Link zur SAS-Tabelle. SAS-Tabelle muss separat übertragen werden. Änderung des Tabellen-Pfades im Projekt durch: - Tabelle anklicken -RM Eigenschaften - Dateiname: Ändern b) Enthalten alle Ergebnistabellen und Grafiken und benötigen dadurch unter Umständen viel Speicherplatz. 3
4. Unterschiedliche Einstellungen Im SAS/EG gilt: Validvarname=Any. Damit sind die Variablennamen Alter? Wütend Binde-strich gültig. Für SAS 8.2 und SAS9 gilt: Validvarname=V7. Ausweg: SAS Notes SN-012607 oder Extras > Optionen > SAS-Programm > Eigenen SAS-Code vor ausge.. aktivieren. 5. Nicht alles ist machbar Beispiele: 1. Proc Fsedit ist nicht über Code-Fenster aufrufbar (stattdessen wird Proc Fsbrowse ausgeführt) 2. Keine Gestaltungsoptionen (Font=, Height= ) bei Title- und Footnote-Anweisungen 3. Keine Option Order= bei Proc Freq 4. Full Outer Join beim Verknüpfen von Tabellen ohne Coalesce 4
6. Ohne Libraries geht nichts Das Öffnen von vorhandenen Tabellen über das Menü Datei > Öffnen verlangt nur die Angabe des Windows- Ordners. Aber: Wollen Sie eine Tabelle neu anlegen über das Menü Datei > Neu > Daten, müssen Sie eine Bibliothek auswählen. 5
Und.. beim Abspeichern des Projekts erscheint: Besser: 6
Temporäre Buffer Copyright 2003, SAS Institute Inc. All rights reserved. Temporäre Buffer Warum? Ergebnisse zwischenspeichern Programme zusammensetzen 7
Temporäre Buffer Wie? SAS Standards Pfad abfragen und Buffer allokieren Von SAS Buffer allokieren lassen Zwischenablage benutzen Temporäre Buffer SAS Standards Nur Dateinamen angeben Filename buffer tmp.txt Speicherung im Arbeitsverzeichnis der SAS Sitzung Ändern des Arbeitsverzeichnisses Eigenschaften des Icons X Statement aus SAS heraus 8
Temporäre Buffer Pfad abfragen und Buffer allokieren pathname() Funktion Liefert den Pfad eines Lib-/Fileref Filename buffer %Sysfunc(pathname(WORK))/tmp.txt Temporäre Buffer Von SAS Buffer allokieren lassen Filename-Statement mit Ziel TEMP SAS legt im Work-Verzeichnis eine temporäre Datei an Filename buffer TEMP 9
Temporäre Buffer Zwischenablage benutzen Filename-Statement mit Ziel CLIPBRD Ergebnis landet in Zwischenablage Kann von dort direkt in z.b. Excel eingefügt werden Filename buffer CLIPBRD Verzeichnisinhalte einlesen Copyright 2003, SAS Institute Inc. All rights reserved. 10
Verzeichnisinhalte einlesen Warum? Verarbeitung aller Dateien in einem Verzeichnis Auswahllisten Verzeichnisinhalte einlesen Wie? Filename-Statement SCL-Funktionen Windows-DLL 11
Verzeichnisinhalte einlesen Filename Statement Filename fileref PIPE kommando(s) ; DIR Kommando /B einfache Liste /A:D nur Unterverzeichnisse /A:-D nur Dateien /-C kein Tausender-Punkt Verzeichnisinhalte einlesen SCL-Funktionen im Data Step Arbeiten mit Verzeichnissen did = dopen( fileref ) n = dnum(did) name = dread(did,i) rc = dclose(did) 12
Verzeichnisinhalte lesen SCL-Funktionen im Data Step Arbeiten mit Dateien fid fid n name value = mopen(did,name) bzw. = fopen( fileref ) = foptnum(fid) = foptname(fid,i) = finfo(fid,name) Anmerkung: Es gibt auch Funktionen für Schreibprozesse! Zugriff auf Excelund Access-Tabellen Copyright 2003, SAS Institute Inc. All rights reserved. 13
Verschiedene Möglichkeiten Ohne Voraussetzungen DDE SAS/Access To ODBC ODBC SAS/Access To PC File Formats Prozeduren Import/Export Import/Export Wizard Libname Engine Verschiedene Möglichkeiten Ohne Voraussetzungen DDE SAS/Access To ODBC ODBC SAS/Access To PC File Formats Prozeduren Import/Export Import/Export Wizard Libname Engine 14
Beispiele In der Libname-Anweisung wird anstelle des Ordners die Excelbzw. die Access-Tabelle direkt angegeben: Libname bibexc 'C:\kurs\iris.xls'; Libname bibacc 'C:\kurs\kdat.mdb'; Die Engine wird von SAS automatisch gewählt (siehe Meldung im Log-Fenster). Beispiele (2) Auf diese Tabellen kann nun mit den Prozeduren zugegriffen werden: Proc Univariate Data=bibexc.iris; Run; Im Datenschritt kann die Tabelle in eine SAS-Tabelle überführt werden: Data sasdaten.artikel; Set bibacc.artikel; Run; 15
Einschränkungen Die Replace-Option gilt nicht, d.h. es können keine Änderungen an den Tabellen vorgenommen werden, aber neue Tabellen eingefügt werden. Namen wie Tabelle1$ oder Sheet2$, d.h. Namen mit Sonderzeichen, müssen maskiert werden: Data=bibexc."tabelle1$"N; Optionen der Anweisung Libname An die Libname-Anweisung können Optionen angefügt werden, wie z.b. Getnames=: Libname bibexc 'C:\kurs\iris.xls' Getnames=Yes Scantext=Yes; Weitere Optionen: Mixed=, Usedate=, Scantime= und für Access auch: Scanmemo= (Details siehe unter Proc Import). 16
Interaktive Variante Anlegen neuer Excel-Tabellen Das Schreiben/Anlegen neuer Tabellen ist möglich, das Überschreiben vorhandener wegen nicht vorhandener Replace-Option nicht. Libname outexc 'c:\kurs\out.xls'; Data outexc.test; Set sashelp.class; Run; Libname outexc clear; Wird die Bibliothek nicht entfernt, kann die Tabelle nicht in Excel geöffnet werden. 17
Ende gut, alles gut Grafiken mit True Type Fonts und ODS Copyright 2003, SAS Institute Inc. All rights reserved. Grafiken, TTF & ODS Problem SAS/GRAPH Integration in ODS True Type Fonts unter V8 problematisch SAS/GRAPH unterstützt TTF Von ODS verwendete Devices nicht 18
Grafiken, TTF & ODS Wie erstellt SAS Grafiken? Device-Konzept Grafik wird zunächst unabhängig erzeugt Anschließend von Device interpretiert V6 Device enthält Übersetzungsliste von SAS-spezifischen in TTF-Namen V8 Bestimmte Devices können TTF-Namen erkennen Grafiken, TTF & ODS 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 19
Grafiken, TTF & ODS 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 ODS RTF Immer wieder was Neues Copyright 2003, SAS Institute Inc. All rights reserved. 20
Inhaltsverzeichnis Die Option Contents kann bei größeren RTF-Dokumenten mit zahlreichen Tabellen, Grafiken und Listen recht hilfreich sein, da sie ein Inhaltsverzeichnis im RTF-File anlegt. Ods Rtf File='d:\test.rtf' Contents; Allerdings erst nachdem man im Word die Taste F9 drückt! Seite x von y Mit der Option Pageof im Titel (oder der Fußzeile) kann Page x of y angezeigt werden. Notwendig ist die Option Escapechar=, damit SAS die Option Pageof erkennt. ODS Escapechar = '*'; Ods Rtf file='d:\test.rtf'; Title J=R 'Page *{pageof}'; Proc Print Data=sashelp.class; Run; Ods Rtf Close; Aber: Mit Bodytitle funktioniert das ganze nicht! (SN-015727) 21
Java im Data Step Copyright 2003, SAS Institute Inc. All rights reserved. Java im Data Step Warum? Verwendung bestehender Geschäftslogik Implementierung eigener Funktionen Quellen: SUGI 30: Paper 241-30 Java in SAS JavaObj, a DATA Step Component Object Richard A. DeVenezia http://support.sas.com/rnd/base/topics/datastep/ dot/javaobj.html!!! Unter V 9.1 experimentell!!! 22
Java im Data Step Wie funktioniert das ganze? V9 kann Java Virtual Machine starten (JRE) Im Data Step wird Java-Klasse instanziiert Attribute setzen / lesen Methoden aufrufen Voraussetzung JRE muss eigene Klassen finden Java im Data Step Classpath der JRE Set CLASSPATH Pfad Eigenes Klassenverzeichnis in JRE C:\Programme\SAS Institute\Shared Files\JRE\1.4.1\Classes Proc Javainfo Zeigt Einstellungen der JRE 23
Java im Data Step Erzeugen eines Java Objekts Declare Statement Declare JavaObj myobject; myobject = _new_ JavaObj( Klasse < >); Declare JavaObj myobject( Klasse < >); Bei Packages. durch / ersetzen Ruft Konstruktor der Java-Klasse auf Java im Data Step Attribute setzen und lesen Unterschiedliche Datentypen Java - SAS byte, short, int, long, float, double numeric String character In Zugriffsmethoden gekapselt rc = obj.get set][,static][type]field( name,var) 24
Java im Data Step Methoden aufrufen rc = obj.call[,static][type]method( name, parameter, return-var) Type ist entweder Void, String oder numerischer Datentyp Boolean und Char ab 9.2 Java im Data Step Methoden aufrufen rc = obj.call[,static][type]method( name, parameter, returnvariable) Parameter SAS numeric Double SAS character String SAS javaobj exakte Java Klasse Wrapper Klassen als Übersetzer (type cast von SAS Java) 25
Java im Data Step Methoden aufrufen rc = obj.call[,static][type]method( name, parameter, return-var) Return-Variable nicht bei Void-Methoden SAS numeric SAS character Wrapper Klassen als Übersetzer (type cast von Java SAS) Wo sie diese Unterlagen finden http://www.urz.uni-heidelberg.de/statistik/sas-ah Kapitel 5 Tipps & Tricks Mehr Tipps & Tricks KSFE 2006 in Hamburg www.ksfe.de 26