tipps & tricks - universitaetsrechenzentrum · 16 einschränkungen die replace-option gilt...
TRANSCRIPT
1
Tipps & Tricks
Dr. Carina OrtseifenUniversitätsrechenzentrum Heidelberg
Grischa PfisteriCASUS GmbH Heidelberg
Was Sie erwartet1. 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 gutGrafiken mit True Type Fonts und ODS
6. ODS RTF
7. Java im Data Step
2
Copyright © 2003, SAS Institute Inc. All rights reserved.
SAS/Enterprise GuideSechs Stolperfallen
1. InstallationDie 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 nichtmitinstalliert, auch nicht im Menü angefordert.
3
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 Grafikenund benötigen dadurch unter Umständen viel Speicherplatz.
4
4. Unterschiedliche EinstellungenIm SAS/EG gilt: Validvarname=Any.
Damit sind die VariablennamenAlter? 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 machbarBeispiele:
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
5
6. Ohne Libraries geht nichtsDas Ö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 Sieeine Bibliothekauswählen.
7
Copyright © 2003, SAS Institute Inc. All rights reserved.
Temporäre Buffer
Temporäre BufferWarum?– Ergebnisse zwischenspeichern
– Programme zusammensetzen
– …
8
Temporäre BufferWie?– SAS Standards
– Pfad abfragen und Buffer allokieren
– Von SAS Buffer allokieren lassen
– Zwischenablage benutzen
Temporäre BufferSAS 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
9
Temporäre BufferPfad abfragen und Buffer allokieren– pathname() Funktion
– Liefert den Pfad eines Lib-/Fileref
– Filename buffer „%Sysfunc(pathname(WORK))/tmp.txt“
Temporäre BufferVon SAS Buffer allokieren lassen– Filename-Statement mit Ziel TEMP
– SAS legt im Work-Verzeichnis eine temporäre Datei an
– Filename buffer TEMP
10
Temporäre BufferZwischenablage benutzen– Filename-Statement mit Ziel CLIPBRD
– Ergebnis landet in Zwischenablage
– Kann von dort direkt in z.B. Excel eingefügt werden
– Filename buffer CLIPBRD
Copyright © 2003, SAS Institute Inc. All rights reserved.
Verzeichnisinhalte einlesen
11
Verzeichnisinhalte einlesenWarum?– Verarbeitung aller Dateien in einem Verzeichnis
– Auswahllisten
– …
Verzeichnisinhalte einlesenWie?– Filename-Statement
– SCL-Funktionen
– Windows-DLL
12
Verzeichnisinhalte einlesenFilename Statement– Filename fileref PIPE „kommando(s)“;
DIR Kommando– /B einfache Liste
– /A:D nur Unterverzeichnisse
– /A:-D nur Dateien
– /-C kein Tausender-Punkt
Verzeichnisinhalte einlesenSCL-Funktionen im Data Step– Arbeiten mit Verzeichnissen
− did = dopen(„fileref“)
− n = dnum(did)
− name = dread(did,i)
− rc = dclose(did)
13
Verzeichnisinhalte lesenSCL-Funktionen im Data Step– Arbeiten mit Dateien
− fid = mopen(did,name) bzw.
− fid = fopen(„fileref“)
− n = foptnum(fid)
− name = foptname(fid,i)
− value = finfo(fid,name)
– Anmerkung:Es gibt auch Funktionen für Schreibprozesse!
Copyright © 2003, SAS Institute Inc. All rights reserved.
Zugriff auf Excel-und Access-Tabellen
14
Verschiedene MöglichkeitenOhne Voraussetzungen– DDE
SAS/Access To ODBC– ODBC
SAS/Access To PC File Formats– Prozeduren Import/Export
– Import/Export Wizard
– Libname Engine
Verschiedene MöglichkeitenOhne Voraussetzungen– DDE
SAS/Access To ODBC– ODBC
SAS/Access To PC File Formats– Prozeduren Import/Export
– Import/Export Wizard
– Libname Engine
15
BeispieleIn der Libname-Anweisung wird anstelle des Ordners die Excel-bzw. 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;
16
EinschränkungenDie 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 LibnameAn 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).
17
Interaktive Variante
Anlegen neuer Excel-TabellenDas Schreiben/Anlegen neuer Tabellen ist möglich, das Überschreiben vorhandener wegen nicht vorhandener Replace-Optionnicht.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.
18
Copyright © 2003, SAS Institute Inc. All rights reserved.
Ende gut, alles gutGrafiken mit True Type Fonts und ODS
Grafiken, TTF & ODSProblem– SAS/GRAPH Integration in ODS
− True Type Fonts unter V8 problematisch
– SAS/GRAPH unterstützt TTF– Von ODS verwendete Devices nicht
19
Grafiken, TTF & ODSWie 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 & ODSV9– Free Type Library für Schriftarten
− Werden von ODS-Devices verwendet
− Registrieren von TTF in SAS RegistrySchriftarten stehen zur Verfügung
– Proc Fontreg− Kommando REGEDIT
– Core/Printing/Freetype/Fonts
20
Grafiken, TTF & ODSUnterstützende Devices– SASEMF, GIF, JPEG, PNG
Mehr zu diesem Thema:– TS 674:
An Introduction to Exporting SAS/Graph Output to Microsoft OfficeSAS Release 8.2 and higher
Copyright © 2003, SAS Institute Inc. All rights reserved.
ODS RTFImmer wieder was Neues …
21
InhaltsverzeichnisDie 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 yMit 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)
22
Copyright © 2003, SAS Institute Inc. All rights reserved.
Java im Data Step
Java im Data StepWarum?– 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 !!!
23
Java im Data StepWie 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 StepClasspath 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
24
Java im Data StepErzeugen 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 StepAttribute setzen und lesen– Unterschiedliche Datentypen Java - SAS
− byte, short, int, long, float, doublenumeric
− Stringcharacter
– In Zugriffsmethoden gekapselt− rc = obj.get|set][,Static][type]Field(„name“,var)
25
Java im Data StepMethoden 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 StepMethoden aufrufen– rc = obj.call[,Static][type]Method(„name“, parameter, return-
variable)− Parameter
– SAS numeric Double– SAS character String– SAS javaobj exakte Java Klasse
− Wrapper Klassen als Übersetzer(type cast von SAS Java)
26
Java im Data StepMethoden 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 & TricksKSFE 2006 in Hamburg www.ksfe.de