ODS RTF - Zentrierte Spaltenüberschriften bei PROC TABULATE
Werte Forengemeinde,
ich möchte einen RTF-Output erzeugen in dem die Spaltenüberschriften zentriert sind. Wie geht dies? Ich habe bisher keine Funktion gesehen, wo ich nur die Spaltenüberschriften zentriere (eine Option ging für Spalten und Reihenüberschriften - was aber dann auch blöd aussieht). Kann mir da jemand weiterhelfen? Entweder als Anweisung bei der STYLE-Definition oder bei PROC-Aufruf?
PROC TEMPLATE ;
define style styles.name;
style document /
marginbottom=1.83 cm
margintop=1.83 cm
marginleft=2.54 cm
marginright=2.54 cm;
style header /
fontfamily="Arial"
fontweight=medium
fontsize=9pt
color=black
just=left ;
style systemtitle /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=8pt
color=black;
style systemfooter /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=8pt;
style usertext /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=9pt;
style table /
cellpadding = 3
cellspacing = 1
borderwidth = 1 ;
end;
RUN;
ODS LISTING close;
ODS ESCAPECHAR ='~';
OPTIONS orientation=landscape ps=40;
ODS RTF file="&path2.\doc.rtf" startpage=no style=styles.name;
PROC TABULATE DATA=datan style={font=("Arial",8pt,Roman) just=center width=1.5cm} FORMAT=8.0 missing;
by xx;
.;
.;
.;
RUN;
ODS RTF close;
Vielen Dank im Voraus,
Chris86
- Anmelden oder Registrieren um Kommentare zu schreiben

Lösung faktisch schon im Programm enthalten
Hallo Herr Knoll,
in Ihrem mittels PROC TEMPLATE gebauten Style bei dem Header-Objekt einfach "just=left" durch "just=center" austauschen.
Bei der RTF-Ausgabe bewirken schon die Defaults (also ohne Verwendung einer Style-Angabe in der "ODS RTF"-Anweisung) eine Zentrierung der Spaltenüberschriften. Durch Ihre Neudefinition des Styles haben Sie die linksbündige Ausgabe erzwungen.
Besser ist es allerdings, auf den von SAS bereitgestellten Style zurückzugreifen und nur punktuell an den Stellen zu ändern, wo einem der Standard nicht gefällt. Hierzu ein Beispiel:
define style styles.myrtf;
parent=styles.rtf;
style header from header /
fontfamily="Courier"
color=blue;
end;
run;
...
ODS RTF ... style = styles.myrtf;
Es wird in diesem Beispiel der vorhandene RTF-Style (Parent-Anweisung) dahingehend modifiziert, dass die Spaltenüberschriften in Courier und in blau ausgegeben werden. Der Rest bleibt unverändert - u.a. die zentrierte Ausgabe. Die nicht aufgeführten Eigenschaften werden einfach wie definiert und unverändert weitergereicht (durch "from header" vererbt).
Viele Grüße aus Berlin
A. Leißner
Die Lösung trifft noch nicht richtig
Hallo Herr Leißner,
vielen Dank für ihre Antwort und auch dem Aufzeigen der Möglichkeit nur einzelne Attribute im Style zu ändern, jedoch ist dass noch keine Lösung für mein Problem.
Ich bekomme nun zentrierte Spaltenüberschriften, dies ist richtig und auch so gewünscht. Jedoch unterscheidet die Option HEADER (meiner Meinung nach) nicht zwischen Spalten und Zeilenüberschriften. Es werden also nun auch die Zeilenüberschriften zentriert, welche aber eigentlich linksbündig bleiben sollten. Somit ist das Problem noch nicht gelöst!
Ich habe erstmal versucht das Problem zu umgehen, in dem ich bei den LABELS der Spaltenüberschriften soviele nicht unterdrückten Leerzeichen vor den String gesetzt habe, dass es zentriert aussieht. Ist zwar nicht elegant, hilft aber erstmal für den Moment. :-)
Dann halt ganz anders
Hallo Herr Knoll,
das Einfachste scheint mir ein kompletter Verzicht auf Style-Eingriffe zu sein, die die Ausrichtung beeinflussen. RTF-Destination ohne Style bringt (bei mir) automatisch alle Zeilenheader linksbündig und alle Spaltenheader rechtsbündig.
Sie können aber auch ganz gezielt die Ausrichtung für jede einzelne CLASS-Variable beeinflussen (die Leerzeichen sind in der Tat keine so tolle Variante):
CLASS class_var1 class_var2 / style = [textalign = LEFT | CENTER | RIGHT);
CLASS class_var3 class_var4 / style = [textalign = LEFT | CENTER | RIGHT);
CLASSLEV class_var2 / style = [textalign = LEFT | CENTER | RIGHT);
CLASSLEV class_var3 class_var1 / style = [textalign = LEFT | CENTER | RIGHT);
...
TABLES (class_var4 * class_var1), (class_var3 * class_var2) ...;
...
Der Style in der CLASS-Anweisung wirkt sich auf die Anschreibung der Variablennamen aus. Sie können mehrere CLASS-Anweisungen mit unterschiedlichen Vorgaben deklarieren. Dadurch können Sie je CLASS-Variable die Ausrichtung einzeln und gezielt steuern.
Der Style in der CLASSLEV-Anweisung steuert die Anschreibung der Kategoriewerte. Auch hier kann durch die Verwendung mehrerer CLASSLEV-Anweisungen je CLASS-Variable eine individuelle Einstellung vorgenommen werden.
Mit diesem Vorgehen erhalten Sie volle Kontrolle über jeden einzelnen Spalten- und Zeilenheader.
Ich hoffe, dass ich mich damit der Lösung Ihres Problems ein weiteres Stück genähert habe.
Mit freundlichen Grüßen
A. Leißner
Condat AG, Berlin
Das ist die Antwort :-)
Guten Morgen Herr Leißner,
genau dass ist die Antwort, die ich gesucht habe. Nun kann ich die Zellen beliebig und unabhängig von der Header-Option steuern. Vielen Dank!
Natürlich haben sie mit ihrer ersten Bemerkung recht. Mir ist erst jetzt aufgefallen, wenn ich in der PROC TEMPLATE die Definition der Ausrichtung des Headers weglasse, ist alles so wie gewünscht. Die Spaltenüberschriften zentriert und die Reihenüberschriften linksbündig. Aber dank ihrer Antwort kann ich nun auch noch etwas über den Tellerrand (in dem Fall die Standardeinstellung) hantieren.
define style styles.name;
style document /
marginbottom=1.83 cm
margintop=1.83 cm
marginleft=2.54 cm
marginright=2.54 cm;
style header /
fontfamily="Arial"
fontweight=medium
fontsize=9pt
color=black
/*just=left*/ ;
style systemtitle /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=8pt
color=black;
style systemfooter /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=8pt;
style usertext /
fontfamily='Arial'
fontweight=medium
backgroundcolor=white
fontstyle=roman
fontsize=9pt;
style table /
cellpadding = 3
cellspacing = 1
borderwidth = 1 ;
end;
RUN;
Mit freundlichen Grüßen
Chris86
Weitere Frage
Liebe Forengemeinde,
ich habe bezüglich ODS RTF der PROC REPORT in Verbindung mit einem Style-Template noch eine neue Frage. Gibt es für diese Syntax - direktes Ansprechen der Style(Column) in PROC REPORT - auch ein Pendant in PROC TEMPLATE, so dass man sich diese Option als eigenes Template speichern kann?
column e1 e2 e3 e4 e5 e6;
define e1 /order style(header)={width=1cm} ;
define e2 /order style(header)={width=1cm} ;
*...;
RUN;
Denn wenn ich den Style wie bisher definiere, reagiert er auf Style column nicht - ist dies das falsche Schlüsselwort? Welches benötige ich? Denn die SAS-Help ist da leider nicht ausführlich genug.
define style styles.neu;
style report /
just=left;
style column/
fontfamily="SAS Monospace"
fontweight=medium
fontsize=7pt
fontstyle=roman
just=left;
end;
RUN;
Danke + MfG
Chris86