PROC GPLOT: (Overlay-)Plots für Ausprägungen je einer Variablen

Ich hätte eine Frage zur GPLOT-Prozedur, bei der es unter anderem ja auch möglich ist, Overlay-Plots zu erstellen.

In meinem Datensatz sind für verschiedene Variablen (gekennzeichnet über eine jeweils eindeutige ID) jeweils monatliche Anteile angegeben (x1-x5), die ungefähr wie folgt aussehen:

ID    date        x1    x2     x3    x4    x5
12    01JAN05        0.2    0.3    0.1    0.3    0.1
12    01FEB05        0.3    0.2    0    0.3    0.1
12    01MAR05        0.3    0.2    0.2    0.1    0.1
12    01APR05        0.2    0.2    0.2    0.2    0.2
12    01MAY05        0.1    0.3    0.2    0.2    0.2
....            ...
13    01JAN05        0.3    0.1    0.4    0.1    0.1
13    01FEB05        0.4    0    0.3    0.2    0.1
...                ...
Ziel ist es nun für jede ID einen eigenen Overlay-Plot zu erstellen, der als x-Achse die Variable date abbildet und als y-Achse die Anteile von x1-x5.

Ich konnte in der Dokumentation leider keinen Schalter finden,der es ermöglicht, dies via by-Bedingung in der GPLOT-Prozedur zu lösen.

Hat jemand einen Vorschlag?
Danke im voraus.

GPLOT mit Overlay und BY

Das folgende Programm erstellt einen Plot pro Ausprägung der Variable Id. Jeder Plot zeigt an der x-Achse die Variable Date und enthält eine Linie pro X-Variable. PROC TRANSPOSE macht aus den fünf x-Variablen eine namens Col1 und speichert den Namen der ursprünglichen Variablen (x1-x5) in der Variablen _name_;

data anteile;
   
informat date date7.;
   
format date date7.;
   
input id date x1-x5;
datalines;
12    01JAN05        0.2    0.3    0.1    0.3    0.1
12    01FEB05        0.3    0.2    0.0    0.3    0.1
12    01MAR05        0.3    0.2    0.2    0.1    0.1
12    01APR05        0.2    0.2    0.2    0.2    0.2
12    01MAY05        0.1    0.3    0.2    0.2    0.2
13    01JAN05        0.3    0.1    0.4    0.1    0.1
13    01FEB05        0.4    0.0    0.3    0.2    0.1
13    01MAR05        0.3    0.2    0.2    0.1    0.1
13    01APR05        0.2    0.2    0.2    0.2    0.2
13    01MAY05        0.1    0.3    0.2    0.2    0.2
;

proc transpose data=anteile out=anteile_transposed;
   
by id date;
   
var x1-x5;
run;

symbol1 interpol=join;
proc gplot data=anteile_transposed;
   
by id;
   
plot col1 * date = _name_;
run;quit;

Vielen Dank Herr

Vielen Dank Herr Mangold,

ich habe nicht berücksichtigt, dass man die Anteile transponieren muss und offenbar die by-Option völlig übersehen.

Eine kleine Ergänzungsfrage hätte ich noch:

Ist es möglich, die (sich aufgrund der overlay-Option verdeckenden) gefüllten Bereiche, die die Verläufen der Anteile von x1-x5 im Zeitablauf darstellen, [ich kann die Linien mit u.a. kleinen Änderung als Overlay-Graph anzeigen lassen], auch gestackt (d.h. übereinander) ausgeben zu lassen, so dass die Summe aller Anteile eines Zeitpunkts jeweils Eins ergibt?
Dadurch könnte man sehr übersichtlich darstellen, wie die Anteilsverhältnisse der x-Variablen zu jedem Zeitpunkt sind und wie sie sich im Zeitablauf zueinander entwickeln.

symbol1 interpol=join;
proc gplot data=anteile_transposed;
   
by id;
   
plot col1 * date = _name_ /overlay areas=5;
run;quit;

einfach kumulieren

Das geht ganz einfach dadurch, dass man die Anteile kumuliert, etwa wie folgt im Data-Schritt:

data anteile;
   
informat date date7.;
   
format date date7.;
   
input id date x1-x5;
   x2 = x2 + x1;
   x3 = x3 + x2;
   x4 = x4 + x3;
   x5 = x5 + x4;
datalines;
Die OVERLAY-Option in PROC GPLOT ist übrigens nicht nötig, weil die Schreibweise y * x = z in der PLOT-Anweisung das Overlay impliziert.

Bei der beschriebenen

Bei der beschriebenen Vorgehensweise stoße ich noch auch das Problem, dass die Linien offenbar teilweise beginnend vom Nullpunkt der y-Achse gefüllt werden und somit darunterliegende Kurven/Bereiche verdecken.
Dies geschieht scheinbar, obwohl im zu zeichnenden Datensatz die Werte korrekt aufsummiert werden.

Der Code für einen zu zeichnenden Plot mit 11 Areas lautet wie folgt.
Obwohl die Legende korrekt ausgegeben wird und auch die Werte im File plot stimmen, werden im augegebenen Plot nur der schwarze und der rote Bereich gezeichnet.

/* Goptions sind global gesetzt, müssen hier nicht neu definiert werden */
symbol1  interpol=join v=none ci=CX0000FF;
symbol2  interpol=join v=none ci=CXFF0000;
symbol3  interpol=join v=none ci=CX008080;
symbol4  interpol=join v=none ci=CX00FF00;
symbol5  interpol=join v=none ci=CXFF00FF;
symbol6  interpol=join v=none ci=CXFFFF00;
symbol7  interpol=join v=none ci=CX00FFFF;
symbol8  interpol=join v=none ci=CX800000;
symbol9  interpol=join v=none ci=CX008000;
symbol10 interpol=join v=none ci=CX800080;
symbol11 interpol=join v=none ci=CX000080;


axis1 minor=none  label=(c=black h=20pt "Endedes Schätzfensters") COLOR=black  value=(height=10pt angle=90)
;
axis2 minor=none  order=(0 to 1 by 0.1) value=(height=20pt)
    
offset=(0,0) label=(height=20pt a=90 'Style-Exposure') COLOR=black
    
value=(height=10pt)
;

legend1 label=none position=(bottom center) ACROSS=4 DOWN=4 value=(h=15pt color=black) shape=bar(3, 0.8)
;

proc gplot data=plot;
    
plot estimate * date = _NAME_  
                /
areas=11
                  
haxis=axis1 vaxis=axis2 legend=legend1;
Run;
Quit;