BookmarkSubscribeRSS Feed
CarlosP73
Fluorite | Level 6

Hello!

 

I'm creating a .pdf document which consists of several outputs gruped by a "group by" and I need the reporting for each group to be in a single file, i.e. all output in group=1 in the same file and the same for the rest of the groups. I don't know how to gather all output from different proc's but the same group in the same pdf. I am now getting a different .pdf per proc.

 

Can anyone help me?

 

Thanks!!

 

/*Input table creation*/

data tas;

drop div;
do group_var=1,2;
if group_var=1 then do;
div=4;alp=0.05;

end;
else do;
div=0.5;alp=0.01;
end;
do x=1 to 3;
y=x+ranuni(3)/div;output;
y=x+ranuni(3)/div;output;
end;end;
run;

 

/*Reporting*/

%let pdfFile=...\pruebaRep.pdf;
ods listing off;
ods pdf file="&pdfFile." newfile=bygroup;
ods graphics on;
proc corr data=tas;
var x y;
BY GROUP_VAR;
run;

proc sgplot data=tas;
scatter x=x y=y / markerattrs=(symbol=circle size=2 mm);
BY GROUP_VAR;
run;
ods _all_ close;
ods listing;

 

3 REPLIES 3
Reeza
Super User

Unfortunately in these cases you cannot use BY group processing, you need macro logic or automatic code generation of some kind. 

 

I wrote a tutorial on how to do this here:

https://github.com/statgeek/SAS-Tutorials/blob/master/Turning%20a%20program%20into%20a%20macro.md

 

If you have questions or feedback please let me know. 

 

I highly recommend following the code in the tutorial first and then doing yours step by step.

 


@CarlosP73 wrote:

Hello!

 

I'm creating a .pdf document which consists of several outputs gruped by a "group by" and I need the reporting for each group to be in a single file, i.e. all output in group=1 in the same file and the same for the rest of the groups. I don't know how to gather all output from different proc's but the same group in the same pdf. I am now getting a different .pdf per proc.

 

Can anyone help me?

 

Thanks!!

 

/*Input table creation*/

data tas;

drop div;
do group_var=1,2;
if group_var=1 then do;
div=4;alp=0.05;

end;
else do;
div=0.5;alp=0.01;
end;
do x=1 to 3;
y=x+ranuni(3)/div;output;
y=x+ranuni(3)/div;output;
end;end;
run;

 

/*Reporting*/

%let pdfFile=...\pruebaRep.pdf;
ods listing off;
ods pdf file="&pdfFile." newfile=bygroup;
ods graphics on;
proc corr data=tas;
var x y;
BY GROUP_VAR;
run;

proc sgplot data=tas;
scatter x=x y=y / markerattrs=(symbol=circle size=2 mm);
BY GROUP_VAR;
run;
ods _all_ close;
ods listing;

 


 

CarlosP73
Fluorite | Level 6

Hello Reeza,

 

Thank you for your answer. Unfortunately I still cannot find a way, even using macro language, to stop and resume generation of ooutput in an ods pdf within the very same group group.

 

What I'm trying now is the use of ods pdf(id=) to select or exclude output. The following SAS document can be of help:

https://www.lexjansen.com/nesug/nesug12/gr/gr04.pdf

 

This is the code:

data tas;drop div;
do group_var=1,2;
if group_var=1 then do;
div=4;
alp=0.05;
end;
else do;
div=0.5;
alp=0.01;
end;
do x=1 to 3;
y=x+ranuni(3)/div;
output;
y=x+ranuni(3)/div;
output;
end;
end;
run;

filename regoutP1 '...\pruebaRepG1.pdf';
filename regoutP2 '...\Desktop\pruebaRepG2.pdf';

ods _all_ close;
ods pdf(id=group1) file=regoutP1;
ods pdf(id=group2) file=regoutP2;

 

ods pdf(id=group1) select all;
ods pdf(id=group2) exclude all;
proc corr data=tas(where=(group_var=1));
var x y;
run;
proc sgplot data=tas(where=(group_var=1));
scatter x=x y=y / markerattrs=(symbol=circle size=2 mm);
run;

 

ods pdf(id=group1) exclude all;
ods pdf(id=group2) select all;
proc corr data=tas(where=(group_var=2));
var x y;
run;

proc sgplot data=tas(where=(group_var=2));
scatter x=x y=y / markerattrs=(symbol=circle size=2 mm);
run;

ods _all_ close;
ods listing;

 

Reeza
Super User
Did you follow through my example link or run the last portion at least? It does EXACTLY what you're trying to do here.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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.

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