BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
stodo53
Obsidian | Level 7

Hi all,

 

I have been trying to use a macro to print out multiple pdfs so that each center has their own pdf. We need each center to have their own pdf document. I don't think I can use the "newfile=bygroup" option in ODS because I also need it to print out by patient ID number... and also I would prefer to be able to name each pdf document by the center name. 

 

The code I currently have prints out separate pdfs with the center names, however, they all look identical, as such, I know I didn't successfully separate the pdf print outs by the center type. 

 

Any help would be greatly appreciated.

%MACRO printbycenter (centercodes);
ods pdf file="...\extreme_centers_&centercodes..pdf";
PROC PRINT DATA= new;
WHERE PATID_NUM IN (1332, 2198, 2332) AND (heightsds_r NE .) AND (heightsds_r < -6 OR heightsds_r > 6) |
      PATID_NUM IN (238, 327, 599, 917, 1030, 1241, 1395, 1650, 1679, 2111, 2197, 2393, 2708) AND (weightsds_r NE .) AND (weightsds_r < -6 OR weightsds_r > 6)|
	  PATID_NUM IN (1030, 1961, 2111) AND (bmisds_r NE .) AND (bmisds_r < -6 OR bmisds_r > 6)|
	  PATID_NUM IN (1332, 2198) AND (syssds_04 NE .) AND (syssds_04 < -6 OR syssds_04 > 6)|
	  PATID_NUM IN (1332, 2198) AND (diasds_04 NE .) AND (diasds_04 < -6 OR diasds_04> 6)|
	  PATID_NUM IN (116, 148, 303, 385, 560, 969, 2243, 2412) AND (lvmi_devereux NE .) AND (lvmi_devereux < 5 OR lvmi_devereux > 200)|
      PATID_NUM IN (116, 148, 303, 385, 560, 969, 2243, 2412) AND (lvmi_chinali NE .) AND (lvmi_chinali < 5 OR lvmi_chinali > 200)|
	  PATID_NUM IN (164,492,629,679,746,797,806,828,834,846,873,874,965,1150,1193,1507,1548,1564,1578,1619,1644,1752,1765,1930,1934,1942,1988,2108,2117,
 					2128,2258,2269,2284,2351,2419,2513,2682,2699) AND (egfr_schwartz NE .) AND (egfr_schwartz>160);
BY patid;
VAR patid birthmonthyear RTx_Date vdate age ageattx timesincetx sex egfr_schwartz crea_mgdl height heightsds_r BMI_r bmisds_r; *list all relevant variables;
RUN;
ODS PDF CLOSE;
%MEND;
%printbycenter (DE_Hannover); 
%printbycenter (DE_Leipzig); 
%printbycenter (DE_Frankfurt § DE_Heidelberg); 
%printbycenter (TR_Adana); 
%printbycenter (TR_Hacettepe);
%printbycenter (DE_Hamburg); 
%printbycenter (UK_Manchester); 
%printbycenter (IT_Padua);
%printbycenter (DE_Bonn § DE_Bonn_KNZ); 
%printbycenter (IT_Rome); 
%printbycenter (DE_Bonn); 
%printbycenter (PL_Warsaw); 
%printbycenter (DE_Cologne); 
%printbycenter (RU_Moscow); 
%printbycenter (DE_Tuebingen); 
%printbycenter (UK_Nottingham); 
%printbycenter (TR_Istanbul); 
%printbycenter (FR_Lyon);
%printbycenter (IE_Dublin); 
%printbycenter (IT_Turin); 
%printbycenter (IT_Milan); 
%printbycenter (ES_Barcelona);
%printbycenter (DE_Essen); 
%printbycenter (UK_Birmingham); 
%printbycenter (DE_Hamburg § DE_Munich);
%printbycenter (DE_Marburg);
%printbycenter (DE_Heidelberg); 
%printbycenter (DE_Cologne § DE_Heidelberg); 
%printbycenter (FR_Toulouse); 
%printbycenter (SI_Ljubljana);
1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

Macro triggers do not resolve when enclosed in single quotes.

Mammoth-sized hint: always use double quotes in SAS, unless explicitly needed (masking triggers contained in the strings, or double quotes).

View solution in original post

5 REPLIES 5
stodo53
Obsidian | Level 7

I tried the following but then it says I have no observations and so nothing is printed out, which makes no sense. If I leave the quotations out of &centercodes then I get an error. 

%MACRO printbycenter (centercodes);
ods pdf file="...\extreme_centers_&centercodes..pdf";
PROC PRINT DATA= new;
WHERE centercodes in ('&centercodes') &  (PATID_NUM IN (1332, 2198, 2332) AND (heightsds_r NE .) AND (heightsds_r < -6 OR heightsds_r > 6) |
      PATID_NUM IN (238, 327, 599, 917, 1030, 1241, 1395, 1650, 1679, 2111, 2197, 2393, 2708) AND (weightsds_r NE .) AND (weightsds_r < -6 OR weightsds_r > 6)|
	  PATID_NUM IN (1030, 1961, 2111) AND (bmisds_r NE .) AND (bmisds_r < -6 OR bmisds_r > 6)|
	  PATID_NUM IN (1332, 2198) AND (syssds_04 NE .) AND (syssds_04 < -6 OR syssds_04 > 6)|
	  PATID_NUM IN (1332, 2198) AND (diasds_04 NE .) AND (diasds_04 < -6 OR diasds_04> 6)|
	  PATID_NUM IN (116, 148, 303, 385, 560, 969, 2243, 2412) AND (lvmi_devereux NE .) AND (lvmi_devereux < 5 OR lvmi_devereux > 200)|
      PATID_NUM IN (116, 148, 303, 385, 560, 969, 2243, 2412) AND (lvmi_chinali NE .) AND (lvmi_chinali < 5 OR lvmi_chinali > 200)|
	  PATID_NUM IN (164,492,629,679,746,797,806,828,834,846,873,874,965,1150,1193,1507,1548,1564,1578,1619,1644,1752,1765,1930,1934,1942,1988,2108,2117,
 					2128,2258,2269,2284,2351,2419,2513,2682,2699) AND (egfr_schwartz NE .) AND (egfr_schwartz>160));
BY patid;
VAR patid birthmonthyear RTx_Date vdate age ageattx timesincetx egfr_schwartz crea_mgdl height heightsds_r BMI_r bmisds_r; *list all relevant variables;
RUN;
ODS PDF CLOSE;
%MEND;
%printbycenter (DE_Hannover); 
%printbycenter (DE_Leipzig); 
%printbycenter (DE_Frankfurt § DE_Heidelberg); 
%printbycenter (TR_Adana); 
%printbycenter (TR_Hacettepe);
%printbycenter (DE_Hamburg); 
%printbycenter (UK_Manchester); 
%printbycenter (IT_Padua);
%printbycenter (DE_Bonn § DE_Bonn_KNZ); 
%printbycenter (IT_Rome); 
%printbycenter (DE_Bonn); 
%printbycenter (PL_Warsaw); 
%printbycenter (DE_Cologne); 
%printbycenter (RU_Moscow); 
%printbycenter (DE_Tuebingen); 
%printbycenter (UK_Nottingham); 
%printbycenter (TR_Istanbul); 
%printbycenter (FR_Lyon);
%printbycenter (IE_Dublin); 
%printbycenter (IT_Turin); 
%printbycenter (IT_Milan); 
%printbycenter (ES_Barcelona);
%printbycenter (DE_Essen); 
%printbycenter (UK_Birmingham); 
%printbycenter (DE_Hamburg § DE_Munich);
%printbycenter (DE_Marburg);
%printbycenter (DE_Heidelberg); 
%printbycenter (DE_Cologne § DE_Heidelberg); 
%printbycenter (FR_Toulouse); 
%printbycenter (SI_Ljubljana); 


Kurt_Bremser
Super User

Macro triggers do not resolve when enclosed in single quotes.

Mammoth-sized hint: always use double quotes in SAS, unless explicitly needed (masking triggers contained in the strings, or double quotes).

stodo53
Obsidian | Level 7

This worked! Thank you very much, and I also appreciate the other tip you left in the second comment - I corrected my code accordingly. 

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
  • 5 replies
  • 1662 views
  • 2 likes
  • 3 in conversation