Automatisches Ermitteln der Achsenbeschriftung

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Von Heribert Ramroth: Carina Ortseifen, Grischa Pfister, Heribert Ramroth, Marianne Weires: Tipps und Tricks für den leichteren Umgang mit der SAS Software, KSFE 2009

Stellen Sie sich folgende Datensituation vor: Sie wollen prozentuale Verkaufszahlen / Krankheitshäufigkeiten in mehreren vergleichbaren Situationen abbilden, um die Ergebnisse visuell zu vergleichen.

Ein Beispiel:

  • Häufigkeitsverteilungen (prozentual)
    • 4 Quartale
    • 3 Städte

Idee:

  • Visuelles Erkennen der Unterschiede in den Quartalen
  • Automatisches Ermitteln der Ausprägungen der Städte („City“, X-Achse)

Der letzte Punkt ist insbesondere dann wichtig, wenn dieses Vorgehen auf viele unterschiedliche Variablen angewendet werden soll, ohne deren midpoints jeweils manuell zu ermitteln.


Der Beispieldatensatz:

data Bsp;
input Quartal $3. @5 City$2. 
@8 value 2.;
datalines;
I HD 75
I MA 50
II MA 25
II LU 75
III HD 25
III MA 50
III LU 25
IV LU 50
; run;


Das Wunschergebnis.JPG

Das Problem: Der Standard SAS/GRAPH Code stellt nur 2 unzureichende Möglichkeiten zur Verfügung, die im Folgenden dargestellt werden:

1) by:

proc gchart data=bsp;
   	vbar city/ patternid= midpoint;            
by Quartal ;
run; quit;

Statement.JPG

2) Option group:

proc gchart data=bsp;
   	vbar city/ patternid= midpoint group= Quartal;            
by Quartal ;
run; quit;

Option Group.JPG

Die Lösung nach manueller Ermittlung der Ausprägungen der Variablen City lautet wie folgt:

proc gchart data=bsp;
   vbar city /   patternid= midpoint   midpoints= "HD" "LU" "MA"; 
run; 
quit; 

Frage: Wie kommen alle Ausprägungen/Kategorien der Variablen City ins midpoints statement, ohne sie manuell erst zu ermitteln und anschließend ins midpoints statement reinzuschreiben?

Die Makro-Lösung: Man ermittelt alle Ausprägungen „automatisch“.

Der zugehörige Makro-Code lautet wie folgt:

%Macro GetGroups(table= ,var= ,mvar= );
/*	table 	Name der Quelle (Lib.Tab)
     var    	Name der Variable, deren Ausprägungen ermittelt werden
     mvar 	Name der Makrovariable, in die das Ergebnis gespeichert wird   */
  %Global &mvar;
  /* Abfrage der distinkten Ausprägungen */
  Proc Sql Noprint;
    	Select Distinct &var Into :&mvar Separated By ' " " '
     	From &table;
  Quit;
  /* führendes und schließendes Anführungszeichen */
  %Let &mvar = "&&&mvar";
%Mend;                             

%GetGroups(table=bsp, var=City, mvar=gr);

axis1 order=(0 to 100 by 25) label=("%");
axis2 label=("");

proc gchart data=bsp;
   	vbar city/ freq= value 	raxis= axis1 maxis= axis2 
		patternid= midpoint midpoints = &gr. ; 
run; quit;

Literatur

  • SAS Institute Inc., 2004. SAS® 9.1 SQL Procedure User’s Guide. Cary, NC: SAS Institute Inc.