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:

data ?!?!?!? ;

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?

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:

%_eg_conditional_dropds(SASUSER.CFMT);

/* 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"

Proc Format;
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:

data FAST2004.MyDataSet; /* ein von DIR gewählter Name */
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 Das SAS System 14:33 Monday, April 19, 2010

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

proc setinit;run;

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