BookmarkSubscribeRSS Feed
BigPete
Obsidian | Level 7

Hi! Is there a way to work an equivalent of #byval() into the "compute before _page_" part of PROC REPORT? It seems that #byval and #byvar only works for TITLE statements. TIA.

 

data example;
  input name $ num;
  datalines;
Bob 12
Jill 19
Bob 23
Jill 40
;
proc sort; by name; run;

options nobyline;

proc report data=example nowd;
  by name;
/*  title "#byval(name)";*/
  column name num;
  compute before _page_ / style=header{just=l};
	line "#byval(name)";
  endcomp;
run;
2 REPLIES 2
BigPete
Obsidian | Level 7

Never mind. Further Googling helped me to figure it out. I already figured out keeping the bottom border. But how do I insert the top border to make the tables look like these?

BigPete_0-1670185983822.png

 

BigPete_1-1670186017249.png

 

 

 


proc template;
  define style styles.test1;
	parent=styles.printer;
	style fonts /
      'TitleFont' = ("Albany AMT",13pt,bold)
	  'TitleFont2' = ("Albany AMT",13pt,bold)
      'StrongFont' = ("<MTserif>, Times Roman",10pt,bold)
      'EmphasisFont' = ("Calibri",10pt,bold)
      'FixedEmphasisFont' = ("<MTmonospace>, Courier",9pt,italic)
      'FixedStrongFont' = ("<MTmonospace>, Courier",9pt,bold)
      'BatchFixedFont' = ("SAS Monospace, <MTmonospace>, Courier",6.7pt)
      'FixedFont' = ("<MTmonospace>, Courier",9pt)
      'headingFont' = ("<MTserif>, Times Roman",11pt,bold)
	  'docFont'=("Albany AMT",10pt)
	  ;
	style systemtitle from TitlesAndFooters /
	  just=center
	  vjust=center
	;
	style Body from Document /
      marginbottom = 0.5in
      margintop = 0.5in
      marginright = 0.25in
      marginleft = 0.25in;
	style Table from Output /
	  frame=below
      rules = none
	  borderspacing=0
      borderwidth=0.5pt
      borderstyle = solid
	  font=fonts('docFont')
	;
	style header from table /
	  just=right
	  vjust=middle
	  fontsize=11pt
	  fontweight=bold
	  background=white
	;
	class cell /
	  paddingleft=1pt
	  paddingright=1pt
	;
  end;
run;


data example;
  input name $ num;
  datalines;
Bob 12
Jill 19
Bob 23
Jill 40
;
run;


ods pdf file="example.pdf" notoc style=styles.test1;

proc report data=example nowd;
  column name num;

  define name / order order=internal format=$4.;

  break after name / page;
  compute before _page_ / style=header{just=l};
	line name $4.;
  endcomp;
run;

ods pdf close;

 

 

 

BigPete
Obsidian | Level 7

Never mind again. Figured adding "style(header)=[bordertopwidth=0.5pt bordertopcolor=black]" did the trick.

 

proc template;
  define style styles.test1;
	parent=styles.printer;
	style fonts /
      'TitleFont' = ("Albany AMT",13pt,bold)
	  'TitleFont2' = ("Albany AMT",13pt,bold)
      'StrongFont' = ("<MTserif>, Times Roman",10pt,bold)
      'EmphasisFont' = ("Calibri",10pt,bold)
      'FixedEmphasisFont' = ("<MTmonospace>, Courier",9pt,italic)
      'FixedStrongFont' = ("<MTmonospace>, Courier",9pt,bold)
      'BatchFixedFont' = ("SAS Monospace, <MTmonospace>, Courier",6.7pt)
      'FixedFont' = ("<MTmonospace>, Courier",9pt)
      'headingFont' = ("<MTserif>, Times Roman",11pt,bold)
	  'docFont'=("Albany AMT",10pt)
	  ;
	style systemtitle from TitlesAndFooters /
	  just=center
	  vjust=center
	;
	style Body from Document /
      marginbottom = 0.5in
      margintop = 0.5in
      marginright = 0.25in
      marginleft = 0.25in;
	style Table from Output /
	  frame=below
      rules = none
	  borderspacing=0
      borderwidth=0.5pt
      borderstyle = solid
	  font=fonts('docFont')
	;
	style header from table /
	  just=right
	  vjust=middle
	  fontsize=11pt
	  fontweight=bold
	  background=white
	;
	class cell /
	  paddingleft=1pt
	  paddingright=1pt
	;
  end;
run;


data example;
  input name $ num;
  datalines;
Bob 12
Jill 19
Bob 23
Jill 40
;
run;


ods pdf file="example.pdf" notoc style=styles.test1;

proc report data=example nowd
	style(header)=[bordertopwidth=0.5pt bordertopcolor=black]
;
  column name num;

  define name / order order=internal format=$4.;

  break after name / page;
  compute before _page_ / style=header{just=l};
	line name $4.;
  endcomp;
run;

ods pdf close;

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 1442 views
  • 0 likes
  • 1 in conversation