Given the dataset Temp1 from the code below, I am trying to generate a table with header borders like this ( I manually added the borders in Word).
data Temp1;
input Col1 $ Col2 Col3 Col4 Col5 Col6;
datalines;
Set1 2 3 4 5 6
;
run;
ODS RTF File="&FilePath.\HeaderTest.rtf";
ODS Escapechar='^';
options nodate nonumber;
proc report data=Temp1
Style(Report)=[rules=None Frame=HSides]
style(Header)=[background=lightgrey]
style(Column)=[just=c];
Columns ('^{Style[borderbottomwidth=0
borderrightwidth=0.1pt
borderrightcolor=black]}'(Col1))
('^{Style[borderbottomwidth=0]}'(Col2))
('^{Style[borderleftwidth=0.1pt
borderleftcolor=black
borderrightwidth=0.1pt
borderrightcolor=black]Span1}'(Col3 Col4))
('Span2'(Col5 Col6));
define Col1 / display
style(Header)=[bordertopwidth=0
/* bordertopcolor=lightgrey*/
];
define Col2 / analysis
style(Header)=[bordertopwidth=0
/* bordertopcolor=lightgrey*/
borderleftwidth=0.1pt
borderleftcolor=black];
define Col3 / analysis
style(Header)=[
borderleftwidth=0.1pt
borderleftcolor=black
bordertopwidth=0.1pt
bordertopcolor=black];
define Col4 / analysis
style(Header)=[
borderleftwidth=0.1pt
borderleftcolor=black
bordertopwidth=0.1pt
bordertopcolor=black];
define Col5 / analysis
style(Header)=[
borderleftwidth=0.1pt
borderleftcolor=black
bordertopwidth=0.1pt
bordertopcolor=black];
define Col6 / analysis
style(Header)=[
borderleftwidth=0.1pt
borderleftcolor=black
bordertopwidth=0.1pt
bordertopcolor=black];
run;
ODS RTF Close;
Notice I used escape char to create an empty spanning header over each of Col1 and Col2. Both those spanning headers have a borderbottomwidth=0 ,and Col1 and Col2 headers have bordertopwidth=0.
But this outputs the following
even with the border set to 0 from top and bottom, it still shows the border.
Then if I uncomment the 'bordertopcolor=lightgrey' for Col1 and Col2, it removes the border (or just masks it), but leaves a gap in the vertical column. (circled below, hopefully visible)
Why does the bordertop/bottom width=0 not remove the border and not result in a solid vertical line? Is it that the spanning header borders are done with ODS EscapeChar? Is there a way around this? or is there another way to extend Col1 and Col2 headers up to the top frame, rather than generate dummy spanning headers?
Hi,
Sorry for multiple replies..
I tried this code and it worked. A thin dash line is visible but it won't affect the printing.
proc report data=Temp1 split = '@'
Style(Report)=[rules=None Frame=HSides cellspacing=0 ]
style(Header)=[background=lightgrey borderleftwidth=0.1pt borderleftcolor=black borderrightwidth=0.1pt borderrightcolor=black ]
style(Column)=[just=c bordertopcolor=black bordertopwidth=0.1pt borderleftcolor=white borderrightcolor=white borderbottomwidth=0.1pt borderbottomcolor=black];
Columns
("^S={borderleftwidth=0.1pt borderleftcolor=black}" (col1))
("^S={borderleftwidth=0.1pt borderleftcolor=black}" (col2))
("^S={borderbottomwidth=0.1pt borderbottomcolor=black borderbottomstyle=solid}Span1" (Col3 Col4))
("^S={borderbottomwidth=0.1pt borderbottomcolor=black borderbottomstyle=solid}Span2" (Col5 Col6));
define Col1 /display;
define Col2 /analysis;
define Col3 /analysis;
define Col4 /analysis;
define Col5 /analysis;
define Col6 /analysis;
run;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.