BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.

I created a custom PROC TEMPLATE with all my desired fonts for generic table outputs by modifying an existing PDF style sasdocPrinter. I then stored this template into my working library, process1.

proc template;
	define style MyStyle /store=process1.tmplts;
		Replace Table from Output / frame=BOX Rules=groups cellpadding=2pt 
			borderspacing=0.75pt borderwidth=0.75pt borderstyle=solid;
		Replace Body from Document / topmargin=1in bottommargin=1in 
			leftmargin=1in rightmargin=1in;
		parent=styles.sasdocPrinter;
		replace fonts / 'TitleFont2'=("Times New Roman", 10.1pt) 
			'TitleFont'=("Times New Roman", 10.1pt) 'StrongFont'=("Times New Roman", 
			10.1pt) 'EmphasisFont'=("Times New Roman", 10.1pt) 
			'FixedEmphasisFont'=("Courier New", 10.1pt) 
			'FixedStrongFont'=("Courier New", 10.1pt) 'FixedHeadingFont'=("Courier New", 
			10.1pt) 'BatchFixedFont'=("Courier New", 10.1pt) 'FixedFont'=("Courier New", 
			10.1pt) 'headingEmphasisFont'=("Times New Roman", 10.1pt) 
			'headingFont'=("Times New Roman", 10.1pt) 'docFont'=("Times New Roman", 
			10.1pt);
end;
run;

I'm in the same library, process1, to create my tables/figures/listings because I find staying in the same library easier for my work. 

When I point to my custom template in the ODS PDF statement, nothing happens to my fonts, which means SAS isn't reading my template at all:

 

ods pdf style=tmplts.MyStyle;

proc report data=counts3 nowindows split="*" style(report)={rules=NONE frame=void}
headline headskip;
	columns (invnid coli2 coli1 coli3);
	define invnid /order style={cellwidth=31% asis=on just=l}
	"Investigator Name, and Investigator Number"; 
	define coli2 /display style={cellwidth=22% just=c} spacing=3 order order=data flow "Placebo*(n=&n2)" left;
	define coli1 /display style={cellwidth=22% just=c} spacing=3 order order=data flow "CMP-135 * (n=&n1)" left;
	define coli3 /display style={cellwidth=22% just=c} spacing=3 order order=data flow "All Patients * (n=&n3)" left;
	break after invnid/skip;
	compute after _page_/style={just=l font_face='Courier New' font_size=10pt bordertopcolor=black bordertopwidth=0.25};
line "Note:";
line "Investigator name & ID number used.";
endcomp;
	title1 j=l 'Company/PRJ5457C';
	title2 j=c 'Table 14.1/1';
	title3 j=c 'Enrollment by Investigator';
	title4 j=c 'Randomized Patients';
run;

How do I make sure that my template's parameters are invoked? THANK YOU! Smiley Happy

1 ACCEPTED SOLUTION

Accepted Solutions
SuzanneDorinski
Lapis Lazuli | Level 10

Use an ODS PATH statement when creating custom templates.

 

libname process1 '/folders/myfolders/templates';

ods path template.process1(update) sashelp.tmplmst(read);

proc template;
	define style MyStyle /store=process1.tmplts;
		Replace Table from Output / 
		  frame=BOX 
		  Rules=groups 
		  cellpadding=2pt 
		  borderspacing=0.75pt 
		  borderwidth=0.75pt 
		  borderstyle=solid;
		Replace Body from Document / 
		  topmargin=1in 
		  bottommargin=1in 
		  leftmargin=1in 
		  rightmargin=1in;
		parent=styles.sasdocPrinter;
		replace fonts / 
		  'TitleFont2'=("Times New Roman", 10.1pt) 
		  'TitleFont'=("Times New Roman", 10.1pt) 
		  'StrongFont'=("Times New Roman", 10.1pt) 
		  'EmphasisFont'=("Times New Roman", 10.1pt) 
		  'FixedEmphasisFont'=("Courier New", 10.1pt) 
		  'FixedStrongFont'=("Courier New", 10.1pt) 
		  'FixedHeadingFont'=("Courier New", 10.1pt) 
		  'BatchFixedFont'=("Courier New", 10.1pt) 
		  'FixedFont'=("Courier New", 10.1pt) 
		  'headingEmphasisFont'=("Times New Roman", 10.1pt) 
		  'headingFont'=("Times New Roman", 10.1pt) 
		  'docFont'=("Times New Roman", 10.1pt);
	end;
run;

Then use an ODS PATH statement in your other programs to let SAS know that you have your own style templates.

 

options nodate;

libname process1 '/folders/myfolders/templates';

* MyStyle template has been saved to process1 library in a separate program ;

* use ods path statement to make custom templates available ;

ods path process1.tmplts(update) sashelp.tmplmst(read);

ods pdf 
  style=MyStyle 
  file='/folders/myfolders/templates/Example using custom template.pdf' ;

proc print data=sashelp.class;
run;

ods pdf close;

ods path reset;

The screen shot below shows the PROC PRINT using the custom style.

 

PROC PRINT using custom stylePROC PRINT using custom style

View solution in original post

2 REPLIES 2
SuzanneDorinski
Lapis Lazuli | Level 10

Use an ODS PATH statement when creating custom templates.

 

libname process1 '/folders/myfolders/templates';

ods path template.process1(update) sashelp.tmplmst(read);

proc template;
	define style MyStyle /store=process1.tmplts;
		Replace Table from Output / 
		  frame=BOX 
		  Rules=groups 
		  cellpadding=2pt 
		  borderspacing=0.75pt 
		  borderwidth=0.75pt 
		  borderstyle=solid;
		Replace Body from Document / 
		  topmargin=1in 
		  bottommargin=1in 
		  leftmargin=1in 
		  rightmargin=1in;
		parent=styles.sasdocPrinter;
		replace fonts / 
		  'TitleFont2'=("Times New Roman", 10.1pt) 
		  'TitleFont'=("Times New Roman", 10.1pt) 
		  'StrongFont'=("Times New Roman", 10.1pt) 
		  'EmphasisFont'=("Times New Roman", 10.1pt) 
		  'FixedEmphasisFont'=("Courier New", 10.1pt) 
		  'FixedStrongFont'=("Courier New", 10.1pt) 
		  'FixedHeadingFont'=("Courier New", 10.1pt) 
		  'BatchFixedFont'=("Courier New", 10.1pt) 
		  'FixedFont'=("Courier New", 10.1pt) 
		  'headingEmphasisFont'=("Times New Roman", 10.1pt) 
		  'headingFont'=("Times New Roman", 10.1pt) 
		  'docFont'=("Times New Roman", 10.1pt);
	end;
run;

Then use an ODS PATH statement in your other programs to let SAS know that you have your own style templates.

 

options nodate;

libname process1 '/folders/myfolders/templates';

* MyStyle template has been saved to process1 library in a separate program ;

* use ods path statement to make custom templates available ;

ods path process1.tmplts(update) sashelp.tmplmst(read);

ods pdf 
  style=MyStyle 
  file='/folders/myfolders/templates/Example using custom template.pdf' ;

proc print data=sashelp.class;
run;

ods pdf close;

ods path reset;

The screen shot below shows the PROC PRINT using the custom style.

 

PROC PRINT using custom stylePROC PRINT using custom style

Thank you so much; I appreciate your help! 

 

SAS Innovate 2025: Call for Content

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!

Submit your idea!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 1481 views
  • 2 likes
  • 2 in conversation