Erste Schritte in SAS - Datenzugriff
Hallo,
ich arbeite zum ersten Mal mit SAS und habe eine - wahrscheinlich banale - Frage. Ich verwende SAS 9.1 mit Enterprise Guide 4.2.
Und zwar schreibe ich gerade meine Diplomarbeit und habe mich von meinem Prof. mehr oder weniger zu einer empirischen Arbeit mit SAS überreden lassen. Datenbasis ist die faktisch anonymisierte Lohn- und Einkommensteuerstatistik vom Statistischen Bundesamt (~600 Variablen und 3,5 Mio Datensätze). Die Daten habe ich auf meinem Rechner als sas7bdat-File vorliegen. Ich habe eine permanente Bibliothek angelegt (FAST2004) die auf das Verzeichnis des SAS Data Sets verweist. In diesem Verzchnis liegt auch meine Projekt-Datei.
Meine Frage ist jetzt, wie ich auf diese Daten zugreife? Ich will in einem ersten Schritt Klassifizierungsvariablen erstellen um in einem nächsten Schritt deskriptive Statistiken für die einzelnen Klassen berechnen zu lassen. (Die Deskriptiven Statistiken sind Dank Enterprise Guide nur einige Klicks) Sowas wie:
IF var_aus_datensatz > 0 then var02 = 1;
IF var_aus_datensatz < 0 then var02 = 2;
IF var_aus_datensatz = 0 then var02 = 3;
run;
Dass die o.g. If-Anweisung nicht effizient ist, ist klar. Das soll nicht Gegenstand dieses Threads sein. :-) Vom statistischen Bundesamt wurde eine CSV-Datei und eine Setup-Datei geliefert. Wenn man diese Setup-Datei in SAS einmal laufen gelassen hat, erhält man die sas7bdat-Datei.
Ich stehe in Sachen SAS noch ganz am Anfang und hoffe, dass ihr mein Problem versteht :-)
Besten Dank
Swen
PS: Könnt ihr mir gute Einsteiger-Literatur zu SAS empfehlen?
- Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Swen, ich würde nicht
Hallo Swen,
ich würde nicht neue Klassenvariablen erstellen, sondern für die entsprechenden Variablen Bereichsformate erstellen.
Dies geht im EG 4.2 folgendermaßen:
- Im Menü Anwendungsroutinen-Daten-Format erstellen ... auswählen.
- im Dialog - Optionen
-- Formatname eingeben z.B. 'Classformat'
-- Numerisches Format ankreuzen
-- Fuzzfaktor ankreuzen
- im Dialog Formate definieren
-- neues Etikett erstellen
--- z. B. "Kleiner 0" eintragen (ohne Anführungszeichen)
-- neuer Bereich
--- Typ: Bereich
--- von: niedrig
--- bis: auschließlich 0
-- neues Etikett
--- "0"
-- neuer Bereich
--- Typ: Diskret
--- Wert: 0
-- neues Etikett
--- "Größer 0"
-- neuer Bereich
--- Typ: Bereich
--- von: 0 ausschließlich
--- bis: Hoch
-- In der Codevorschau sollte es dann so aussehen:
/* WARNUNG: Folgender PROC FORMAT-Schritt definiert ein Format. Die */
/* Länge des Formatnamens ist mit SAS-Servern vor Version 9 */
/* nicht kompatibel. Durch die Verwendung des Codes in älteren */
/* Versionen kann es zu unformatierten Werten und/oder zu */
/* unerwarteten Fehlern beim Verweis auf das Format kommen. */
PROC FORMAT
LIB=WORK
;
VALUE classformat
LOW -< 0 = "Kleiner 0"
0 = "0"
0 <- HIGH = "Größer 0";
RUN;
Diese Format kannst du dann der Klassenvariable bei den Auswertungen zuweisen. SAS wertet dann nicht nach den tatsächlichen Werten aus, sondern nach den formatierten Werten.
Ein Beispiel:
Folgendes Format erstellen:
niedrig - 13 ausschließlich "Kein Teenie"
13(einschließlich) - hoch = "Teenie"
Value classalter
LOW - < 13 = "kein Teenie"
13 - HIGH = "Teenie"
;
RUN;
Anwendungsroutinen-Beschreiben-Verteilungsanalyse
-- Daten: sashelp.class
--- Analysevariablen: Height weight
--- Analyse gruppieren nach: age
---- Rechtsklick auf Age
---- Eigenschaften
----- Ausgabeformat Ändern...
------ Benutzerdefinierte Formate: classalter
-- Ausführen
führt zu einer getrennten Auswertung der Daten nach "Teenies" und "Nicht Teenies".
Schöne Grüße
Jan
Gruppieren nach...
Hallo Jan,
das Format erstellen ist kein Problem. Nur weiß ich nicht wie ich das Format bei "Analyse gruppieren nach" einfügen soll?!
Schöne Grüße
Swen
Hallo Swen, Du klickst mit
Hallo Swen,
Du klickst mit der rechten Maustaste auf die Gruppierungs/Klassenvariable und erhältst ein Pop-Up Menü. Dort steht ganz unten der Punkt Eigenschaften. Den wählst Du aus und erhältst einen Dialog "Eigenschaften von ...".
Eine der Eigenschaften ist das Ausgabeformat. Dahinter befindet sich ein Button "Ändern ...". Wenn Du den anklickst, erhälst Du einen neuen Dialog "Ausgabeformate".
Im Feld Kategorien wählst du "Benutzerdefiniert".
Dann erscheinen im Feld Formate alle benutzerdefinierten Formate. Dort wählst Du dann das richtige aus.
Erscheint Dein Format nicht bei den benutzerdefinierten Formaten, hast Du vergessen, das Format anlegen zu lassen (auf Ausführen klicken, wenn es markiert ist).
Schöne Grüße
Jan
Buch: Das SAS Survival-Handbuch
Hallo Swen,
für den Einstieg kann ich
Das SAS Survival- Handbuch. Eine praxisorientierte Einführung
(Gebundene Ausgabe, Springer Verlag, Berlin, 1995)
nur wärmstens empfehlen!!!
Bei amazon ist es gebraucht für ca. 50 Euro erhältlich, das ist relativ teuer, aber gut angelegtes Geld!
Dein konkretes Problem geht so:
set FAST2004.inputDataSet; /* der Name von "Daten habe ich auf meinem Rechner als */
/* sas7bdat-File vorliegen", aber ohne das .sas7bdat */
IF var_aus_datensatz > 0 then var02 = 1;
IF var_aus_datensatz < 0 then var02 = 2;
IF var_aus_datensatz = 0 then var02 = 3;
run;
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
Hallo Hans, Soweit
Hallo Hans,
Soweit funktioniert alles. Aber nach ausführen des o.g. Codes steht im Projekt-Explorer an dem Code ein kleines gelbes Dreieck mit einem Ausrufezeichen dran. Was hat das zu bedeuten?
Das Buch werde ich mir bei uns in der Bibliothek erstmal ausleihen und reinschauen.
Vielen Dank für die schnelle Hilfe
Beste Grüße
Swen
Warnung
Hallo Swen,
das gelbe Dreieck bedeutet, dass es Warnungen gegeben hat. Um welche Warnung es sich handelt, kannst Du im Tab LOG nachlesen.
Warnungen sind nicht grundsätzlich Fehler, können aber welche sein.
Schöne Grüße
Jan
Warnung
Hallo Jan,
die folgende Warnung wird bei jedem Code angezeigt. Hat das was zu bedeuten oder kann ich diese Warnung vernachlässigen?
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL=%NRBQUOTE(Format erstellen _Testformat - Local_);
4 %LET _EGTASKLABEL=%NRBQUOTE(Format erstellen _Testformat - Local_);
5 %LET _CLIENTPROJECTNAME=%NRBQUOTE(C:\Dokumente und
5 ! Einstellungen\XPMUser\Desktop\FAST2004\Diplomarbeit.egp);
6
7 ODS _ALL_ CLOSE;
8 ODS PROCTITLE;
HINWEIS: Einige Ihrer Optionen oder Anweisungen werden möglicherweise unter ActiveX- oder
Java-Geräten nicht unterstützt. Grafikstandardwert für diese Treiber unterscheiden sich
möglicherweise von SAS/GRAPH Gerätetreibern. Weitere Informationen erhalten Sie durch
unseren Technischen Support.
9 OPTIONS DEV=ACTIVEX;
10 FILENAME EGHTML TEMP;
HINWEIS: HTML(EGHTML)-Body-Datei wird geschrieben: EGHTML
11 ODS HTML(ID=EGHTML) FILE=EGHTML ENCODING='utf-8' STYLE=EGDefault
11 ! STYLESHEET=(URL="file:///C:/Programme/SAS/Shared%20Files/BIClientStyles/EGDefault.css")
11 ! ATTRIBUTES=("CODEBASE"="http://www2.sas.com/codebase/graph/v91/sasgraph.exe") NOGTITLE
11 ! NOGFOOTNOTE GPATH=&sasworklocation;
WARNUNG: Argument 1 für Funktion TSLVL referenziert durch die %SYSFUNC oder %QSYSFUNC-Makrofunktion
ist außerhalb des gültigen Bereichs.
12
13 %gaccessible;
14 %macro _SASTASK_DROPDS(dsname);
15 %IF %SYSFUNC(EXIST(&dsname)) %THEN %DO;
16 DROP TABLE &dsname;
17 %END;
18 %IF %SYSFUNC(EXIST(&dsname, VIEW)) %THEN %DO;
19 DROP VIEW &dsname;
20 %END;
21 %mend _SASTASK_DROPDS;
22
23 %LET _EGCHARTWIDTH=0;
24 %LET _EGCHARTHEIGHT=0;
25 /* -------------------------------------------------------------------
26 Von SAS-Anwendungsroutine generierter Code
27
28 Generiert auf: Montag, 19. April 2010 um 14:55:06
29 Von Anwendungsroutine: Format erstellen (Testformat - Local)
30
31 Eingabedaten: .
32 Server: Local
33 ------------------------------------------------------------------- */
Besten Dank
Swen
Hallo Swen, wahrscheinlich
Hallo Swen,
wahrscheinlich nicht. In diesem Thread im Support-Forum findest du einen Link zu einer SAS-Note, in der beschrieben ist, wie Du das Problem lösen kannst.
Schöne Grüße
Jan
Warnung die Zweite
Hey Jan,
Danke für den Link! Leider hat die SAS-Note nicht dazu geführt, dass alles funktioniert. Könnte es daran liegen, dass SAS/GRAPH nicht installiert ist? Normal müsste das aber der Fall sein, SAS/GRAPH ist Bestandteil meiner Lizenz. Wo kann ich nachsehen welche Komponenten installiert sind?!
Grüße
Swen
Hier nochmal der komplette Log...
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL=%NRBQUOTE(Streuungsdiagramm);
4 %LET _EGTASKLABEL=%NRBQUOTE(Streuungsdiagramm);
5 %LET _CLIENTPROJECTNAME=%NRBQUOTE(C:\Dokumente und
5 ! Einstellungen\XPMUser\Desktop\FAST2004\Diplomarbeit.egp);
6
7 ODS _ALL_ CLOSE;
8 ODS PROCTITLE;
HINWEIS: Einige Ihrer Optionen oder Anweisungen werden möglicherweise unter ActiveX- oder
Java-Geräten nicht unterstützt. Grafikstandardwert für diese Treiber unterscheiden sich
möglicherweise von SAS/GRAPH Gerätetreibern. Weitere Informationen erhalten Sie durch
unseren Technischen Support.
9 OPTIONS DEV=ACTIVEX;
10 FILENAME EGHTML TEMP;
HINWEIS: HTML(EGHTML)-Body-Datei wird geschrieben: EGHTML
11 ODS HTML(ID=EGHTML) FILE=EGHTML ENCODING='utf-8' STYLE=EGDefault
11 ! STYLESHEET=(URL="file:///C:/Programme/SAS/Shared%20Files/BIClientStyles/EGDefault.css")
11 ! ATTRIBUTES=("CODEBASE"="http://www2.sas.com/codebase/graph/v91/sasgraph.exe") NOGTITLE
11 ! NOGFOOTNOTE GPATH=&sasworklocation;
12
13 %macro _SASTASK_DROPDS(dsname);
14 %IF %SYSFUNC(EXIST(&dsname)) %THEN %DO;
15 DROP TABLE &dsname;
16 %END;
17 %IF %SYSFUNC(EXIST(&dsname, VIEW)) %THEN %DO;
18 DROP VIEW &dsname;
19 %END;
20 %mend _SASTASK_DROPDS;
21
22 %LET _EGCHARTWIDTH=0;
23 %LET _EGCHARTHEIGHT=0;
24 /* -------------------------------------------------------------------
25 Von SAS-Anwendungsroutine generierter Code
26
27 Generiert auf: Dienstag, 20. April 2010 um 13:48:53
28 Von Anwendungsroutine: Streuungsdiagramm
29
30 Eingabedaten: FAST2004.DIPLOMARBEIT_FAST2004
31 Server: Local
32 ------------------------------------------------------------------- */
33
34 PROC SQL;
35 %_SASTASK_DROPDS(WORK.SORTTempTableSorted);
36 QUIT;
HINWEIS: PROZEDUR SQL benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.00 Sekunden
CPU-Zeit 0.00 Sekunden
37
38 /* -------------------------------------------------------------------
39 Datei FAST2004.DIPLOMARBEIT_FAST2004 muss nicht sortiert werden.
2 Das SAS System 13:44 Tuesday, April 20, 2010
40 ------------------------------------------------------------------- */
41 PROC SQL;
42 CREATE VIEW WORK.SORTTempTableSorted
43 AS SELECT c65522, c65309 FROM FAST2004.DIPLOMARBEIT_FAST2004;
HINWEIS: SQL-View WORK.SORTTEMPTABLESORTED wurde definiert.
44 QUIT;
HINWEIS: PROZEDUR SQL benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.00 Sekunden
CPU-Zeit 0.00 Sekunden
45 GOPTIONS xpixels=&_EGCHARTWIDTH ypixels=&_EGCHARTHEIGHT;
________
180
FEHLER 180-322: Anweisung ist nicht gültig oder wird nicht richtig verwendet.
46 SYMBOL1
_______
180
FEHLER 180-322: Anweisung ist nicht gültig oder wird nicht richtig verwendet.
47 INTERPOL=NONE
48 HEIGHT=10pt
49 VALUE=CIRCLE
50 CV=BLUE
51 LINE=1
52 WIDTH=2
53 ;
54 Axis1
_____
180
FEHLER 180-322: Anweisung ist nicht gültig oder wird nicht richtig verwendet.
55 STYLE=1
56 WIDTH=1
57 MINOR=NONE
58
59
60 ;
61 Axis2
_____
180
FEHLER 180-322: Anweisung ist nicht gültig oder wird nicht richtig verwendet.
62 STYLE=1
63 WIDTH=1
64 MINOR=NONE
65
66
67 ;
68 TITLE;
69 TITLE1 "Streuungsdiagramm";
70 FOOTNOTE;
3 Das SAS System 13:44 Tuesday, April 20, 2010
71 FOOTNOTE1 "Erzeugt vom SAS System (&_SASSERVERNAME, &SYSSCPL) am %SYSFUNC(DATE(),
71 ! DDMMYYP10.) um %SYSFUNC(TIME(), TIME5.)";
72 PROC GPLOT DATA=WORK.SORTTempTableSorted
FEHLER: Prozedur GPLOT nicht gefunden.
73 ;
74 PLOT c65309 * c65522 /
75 VAXIS=AXIS1
76
77 HAXIS=AXIS2
78
79 FRAME ;
80 /* -------------------------------------------------------------------
81 Ende Code der Anwendungsroutine.
82 ------------------------------------------------------------------- */
83 RUN;
HINWEIS: Das SAS System hat die Verarbeitung dieses Schritts aufgrund von Fehlern abgebrochen.
HINWEIS: PROZEDUR GPLOT benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.00 Sekunden
CPU-Zeit 0.00 Sekunden
83 ! QUIT;
84 PROC SQL;
85 %_SASTASK_DROPDS(WORK.SORTTempTableSorted);
HINWEIS: View WORK.SORTTEMPTABLESORTED wurde unterdrückt.
86 QUIT;
HINWEIS: PROZEDUR SQL benötigt. (Gesamtverarbeitungszeit):
Echtzeit 0.00 Sekunden
CPU-Zeit 0.00 Sekunden
87
88 TITLE; FOOTNOTE;
89 GOPTIONS RESET=ALL;
________
180
FEHLER 180-322: Anweisung ist nicht gültig oder wird nicht richtig verwendet.
90
91
92
93 %LET _CLIENTTASKLABEL=;
94 %LET _EGTASKLABEL=;
95 %LET _CLIENTPROJECTNAME=;
96
97 ;*';*";*/;quit;run;
98 ODS _ALL_ CLOSE;
99
100
101 QUIT; RUN;
102
Proc Setinit
Hallo Swen,
ob SAS-Graph installiert ist, erfährst Du durch das Kommando
Es sieht so aus, als ob bei Dir SAS-Graph nicht installiert ist, da alle Grafikanweisungen nicht erkannt werden.
Schöne Grüße
Jan
Setini Output
Hallo Jan,
Danke für Deine Hilfe!
*edit*
Ich hab den Fehler gefunden! Irgendwas ist bei der Installation schief gelaufen. Jetzt sollte alles laufen.
Beste Grüße
Swen