proc gplot

Hallo,
ich hab jetzt endlich meine Daten und Tabellen soweit fertig, dass ich zu den Grafiken komm. Leider hab ich weder mit dem Enterprise Guide noch mit der Hilfe was entsprechendes zusammengebracht.

Bitte um Hilfe:
Ich hab drei Variablen die ich in einem Liniendiagramm darstellen möchte. Eigentlich will ich neun Linien haben, es gibt da nämlich noch eine Variable Geschlecht mit den Ausprägungen männlich, weiblich, zusammen.
Die X-Achse ist der Zeitverlauf, die Y-Achse ergibt sich durch die darzustellende Variable.

Mit diesem Code hab ich zumindest mal eine Grafik bekommen, wenn sie auch ganz anders ausschaut als geplant. Von den drei Variablen und dem Geschlecht ist aber noch gar keine Red.

proc gplot data=library.asr_rechn;
plot asr_segi_CI5 * KRE_bj;
where KRE_icd10_CI5_1eds='Zus' and KRE_bdl=10;
run;

danke im voraus & LG
M

Hallo M, kannst du bitte

Hallo M,

kannst du bitte einen kleinen Beispieldatensatz einstellen? Es gibt viele Möglichkeiten Variablen und Ausprägungen unterzubringen und anhand eines Beispieles kann man viel konkretere Lösungsvorschläge machen.

Gruß
Simon

Beispieldaten

Hallo, so wären die Daten:
die erste Variable entspricht dem Geschlecht, die anderen drei sind die Variablen, deren Zeitverlauf ich darstellen will. Zum Schluss die Zeitvariable (X-Achse)

1 3 2 4 1980
1 2 1 4 1981
1 3 2 4 1982
1 4 3 5 1983
1 4 3 5 1984
1 5 2 6 1985
2 10 9 12 1980
2 11 10 12 1981
2 12 11 13 1982
2 13 12 14 1983
2 14 13 16 1984
2 13 12 16 1985
3 25 23 27 1981
3 25 24 26 1982
3 26 24 26 1983
3 27 25 26 1984
3 28 26 27 1985

Am liebsten hätte ich der ersten Zeiverlaufsvariable eine Farbe je Geschlecht zugewiesen und dan beiden anderen die entsprechende Farbe, aber eine dünnere, strichlierte oder gepunktelte Linie.

Ich hoffe, es ist soweit verständlich, leider kann ich kein Bild von der Abb. aus dem xls hier einfügen, dann wärs wahrschinlich klarer.

data lala;   input sex var1

data lala;
input sex var1 var2 var3 time;
cards;
1 3 2 4 1980
1 2 1 4 1981
1 3 2 4 1982
1 4 3 5 1983
1 4 3 5 1984
1 5 2 6 1985
2 10 9 12 1980
2 11 10 12 1981
2 12 11 13 1982
2 13 12 14 1983
2 14 13 16 1984
2 13 12 16 1985
3 25 23 27 1981
3 25 24 26 1982
3 26 24 26 1983
3 27 25 26 1984
3 28 26 27 1985
;

proc gplot data=lala;
plot (var1 var2 var3)*time /overlay legend;
run;quit;

Also, die 9 Linien zu plotten ist nicht weiter tragisch.
Mühsam wird es dann, die richtigen Farben und Linientypen zuzuweisen. Aber im Grunde musst du nur rausfinden, welches Symbol-Statement für welche Linie gilt.

Gruß
Simon

Geschlecht??

Hallo Simon,
danke für den Code, ich habs auf meine Daten angwendet und es hat super funktioniert. Dass es optisch noch nicht so aussieht wie geplant ist relativ egal, das werd ich schon hinkriegen.

Aber: Warum macht die Proc gplot 9 Linien und nicht eine für jede Variable? In dem Code steht doch nirgends wo was vom Geschlecht, oder?

LG, Monika

...so, hab jetzt über den EG die GOPTIONS gefunden und kann den Linien verschiedene Stile, Farben und Symbole zuweisen *freu* Dabei hab ich entdeckt, dass es in Wirklichkeit keine neun Linien sind sondern eh nur drei, die ganze Var1 wird nämlich als eine Linie betrachtet. Der Verbindungsstrich zwischen dem letzten Wert (männlich) und dem ersten Wert (zusammen) schaut ersten ziemlich bescheuert aus und zweitens kann ich so nur die drei Variablen unterschiedlich einfärben und nicht eine Farbe pro Geschlecht verwenden. Wie kann ich das lösen?

LG, Monika

Wenn es für einen

Wenn es für einen X-Achsen-Abschnitt mehrere Beobachtungen gibt (hier 3 Geschlechter für einen Zeitpunkt) werden die alle geplottet. Leider aber nicht als getrennte Linien, sondern als eine einzige (siehst du, wenn du die Punkte verbinden lässt (Nach Zeit sortieren und: symbol1 i=join;).
Die Übliche Funktion um, klassifizierte Grafiken zu erzeugen ist:

...
plot y*x=z

wobei z hier das Geschlecht wäre. Dann werden 3 getrennte Linien erzeugt. Leider ist diese Funktion inkompatibel zur /overlay Option. D.h.

plot (var1 var2 var3)*time=sex

erzeugt 3 einzelne Grafiken, jeweils für eine Variable.
Das hat mich schon immer gestört, aber ich habe mich lange nicht mehr mit Grafiken beschäftigen können/dürfen/müssen und weiß gar nicht mehr, ob ich einen Workaround gefunden hatte.
Weiß jemand anderes Rat?

Gruß
Simon

Genau das was du beschreibst

Genau das was du beschreibst hab ich gesehen (i=join) und auch die klassifizierte Grafik (und deren Problem) konnte ich nachvollziehen. Ziemlich blöd. Wär super wenns wen gibt der damit Erfahrung hat und diese mit mir teilt.
Lg, Monika

Mir fällt dazu nur ein, die

Mir fällt dazu nur ein, die Daten vorher so zu manipulieren, dass es eine Klassifizierungsvariable für jede einzelne Var-Geschlechts-Kombination gibt:

data lala;
input sex var1 var2 var3 time;
cards;
1 3 2 4 1980
1 2 1 4 1981
1 3 2 4 1982
1 4 3 5 1983
1 4 3 5 1984
1 5 2 6 1985
2 10 9 12 1980
2 11 10 12 1981
2 12 11 13 1982
2 13 12 14 1983
2 14 13 16 1984
2 13 12 16 1985
3 25 23 27 1981
3 25 24 26 1982
3 26 24 26 1983
3 27 25 26 1984
3 28 26 27 1985
;

data lala;
attrib class length=$15.;
set lala;
array vars (3) var1-var3;
do i=1 to 3;
var=vars(i);
vartype=i;
class='SEX: '!!put(sex,1.)!!', Var: '!!put(vartype,1.);
output;
end;
drop var1 var2 var3 i;
run;

proc sort data=lala; by time;run;
proc gplot data=lala;
symbol1 i=join l=1 c=red;
symbol2 i=join l=2 c=red;
symbol3 i=join l=3 c=red;
symbol4 i=join l=1 c=green;
symbol5 i=join l=2 c=green;
symbol6 i=join l=3 c=green;
symbol7 i=join l=1 c=blue;
symbol8 i=join l=2 c=blue;
symbol9 i=join l=3 c=blue;
plot var*time=class;
run;quit;

Ich finde es nicht wirklich toll, aber es funktioniert ;)

Gruß
Simon

Danke

Klingt nicht grad sehr berauschend, aber hauptsach es geht mal irgendwie.
Danke, Monika