Tabulate und ihre Formatierung
Habe mal eine Proc Tabulate erstellt mit entsprechender Betragsformatierung. Allerdings fehlt mir die Formatierung der untersten Gesamtsumme, trotz das ich diese (fette Schrift) im Code drin habe.
value Betrag LOW - -0.01 ='#FF0000'
0.00 - HIGH ='#000000'
other ='#008000';
run;
TITLE1 "Gesamtpreise";
TITLE2 """Produktline / Produktkategorie""";
PROC TABULATE DATA=SASHELP.ORSALES OUT=WORK.SUMMARYTABLESORDERS(LABEL="Zusammenfassungstabellen für WORK.ORDERS");
VAR Total_Retail_Price;
CLASS Product_Category / ORDER=DATA MISSING;
CLASS Product_Line / ORDER=DATA MISSING;
TABLE /* Zeilendimension */
Product_Category={LABEL=' ' STYLE={JUST=LEFT VJUST=MIDDLE}}
ALL={LABEL='Gesamtsumme' STYLE={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN FOREGROUND=#800000 JUST=LEFT VJUST=MIDDLE}}*F=COMMAX20.0*{STYLE={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN FOREGROUND=#800000}},
/* Spaltendimension */
Product_Line={LABEL=' '}*{STYLE={JUST=CENTER VJUST=MIDDLE}}*
Total_Retail_Price={LABEL=' '}*{STYLE={JUST=RIGHT VJUST=MIDDLE}}*
Sum={LABEL=' '}*F=COMMAX20.0*{STYLE={JUST=RIGHT VJUST=MIDDLE FOREGROUND=Betrag.}}
ALL={LABEL='Gesamtsumme'}*{STYLE={FONT_WEIGHT=BOLD JUST=RIGHT VJUST=MIDDLE}}*
Total_Retail_Price={LABEL=' '}*{STYLE={JUST=RIGHT VJUST=MIDDLE}}*
Sum={LABEL=' '}*F=COMMAX20.0*{STYLE={FONT_WEIGHT=BOLD FOREGROUND=#800000}}
/* Tabellenoptionen */
/ MISSTEXT='n/a' INDENT=0;
;
RUN;
Achso, vielleicht hat ja jemand eine Idee, wie ich diese wirre Formatierung verallgemeinern kann, um diese als Standard zu nehmen.
Gruß, Sven Redlich
- Anmelden oder Registrieren um Kommentare zu schreiben

Geht leider nicht....
Hallo Herr Redlich,
leider lässt sich die Formtierung der Summenzeile in diesem Fall nicht so durchführen wie Sie es erwarten. Das Format betrag. in der Style-Anweisung der Spalte Total_Retail_Price*Sum überschreibt die Formatanweisung in der Summenzeile. Das ist leider so.
Man kann diesen Tabluate-Aufruf als SAS-Makro abspeichern und so das Layout und die Formatierung wiederverwenden. Variable Anteile des Programms können als Parameter übergeben werden.
Gruß
Klaus Landwich
generelle Färbung und Makro
Hallo Herr Landwich,
Man kann diesen Tabluate-Aufruf als SAS-Makro abspeichern und so das Layout und die Formatierung wiederverwenden. Variable Anteile des Programms können als Parameter übergeben werden.
Da ich kein Makroexperte bin, wäre es super, wenn sie ein beispiel für mich hätten, um die wirre Programmierung der Zahlen auch für normale Anwender zur Verfügung zu stellen.
Gibt es darüber hinaus die Möglichkeit in SAS (bzw. im Enterprise Guide 4.0) die Formatierung von Beträgen (also positive schwarz und negative Zahlen rot färben) generell zu hinterlegen ? Also SAS soll stetig die Beträge färben (über Template eventuell?).
Danke und Gruß,
Sven Redlich
EG 4.2
In EG 4.2 wird es laut SAS Institute sogenannte Task Templates geben. Man kann dann alle Einstellungen, die man im EG an einer Anwendungsroutine macht, als Vorlage speichern und später wiederverwenden. Das geht natürlich nicht, wenn man nur den Code hat wie in Ihrem Beispiel, aber Sie könnten sich das Beispiel dann mit der Anwendungsroutine "Zusammenfassungstabellen" zusammenklicken und anschließend Ihren Anwendern als Vorlage zur Verfügung stellen.
Es gibt eine Lösung...
die zwar nicht schön ist, funktioniert aber.
Man soll die Variable duplizieren, und dann kann man die gleiche Werte verwenden:
set sashelp.orsales;
Total_Retail_Price1=Total_Retail_Price;
run;
PROC TABULATE
DATA=WORK.TEST;
VAR Total_Retail_Price1 Total_Retail_Price;
CLASS Product_Category / ORDER=DATA MISSING;
CLASS Product_Line / ORDER=DATA MISSING;
TABLE /* Zeilendimension */
Product_Category*Sum={LABEL=' ' STYLE={JUST=LEFT VJUST=MIDDLE}}
ALL*F=COMMAX20.0*{STYLE={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN FOREGROUND=#800000}}Sum,
/* Spaltendimension */
Product_Line={label=''}*F=COMMAX20.0*
Total_Retail_Price*f=commax20.0
ALL*f=commax20.0*Total_Retail_Price1*{STYLE={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN}}
/ MISSTEXT='n/a';
keylabel all='Gesamtsumme';
keyword all / style={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN FOREGROUND=#800000 JUST=LEFT VJUST=MIDDLE};
RUN;
Ich habe dann gemacht, was Herr Mangold empfohlen hat, nähmlich die Tabelle im EG zusammengeklickt. Ohne Duplizierung geht es aber nicht.
Wir haben schon öfters das gleiche Problem gehabt; die Lösung ist für kleine Datensätze unproblematisch, bei großen Datenmengen kann es aber länger dauern.
Was ich noch zusätzlich eingefügt habe, sind die Befehle keyword und keylabel. Dadurch wird der - bei Tabulate sowieso ziemlich unübersichtlichen- Code ein bisschen kürzer.
Viele Grüße
Melinda Bede
TeamBank AG
doch recht unschön...
Ist zwar schon etwas her, aber ich möchte das Thema doch nochmal aufgreifen. Die Verdopplung der Gesamtsummenzeile bringt zwar einerseits den Effekt, daß ich nun auch die horizontale wie auch vertikale Gesamtsumme in FETT habe, aber jetzt habe ich natürlich eine doppelte Gesamtsummenzeile stehn. Habe selbst einfach mal etwas rumprobiert.
In der Codezeile....
ALL*F=COMMAX20.0*{STYLE={FONT_WEIGHT=BOLD FONT_STYLE=ROMAN FOREGROUND=#800000}}Sum,
... habe ich dann einfach mal das SUM weggelassen. Hat funktioniert !!! Gibt jetzt nur noch einen winzigen Schönheitsfehler. In der horizontalen steht jetzt "Gesamtsumme Sum". Kann ich das Sum irgendwie noch weglöschen ?