26
1 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

Tipps & Tricks - Universitaetsrechenzentrum · 16 Einschränkungen Die Replace-Option gilt nicht, d.h. es können keine Änderungen an den Tabellen vorgenommen werden, aber neue Tabellen

  • Upload
    vobao

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

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.

6

Und ..beim Abspeichern des Projekts erscheint:

Besser:

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