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

Solved: Re: How to 2X2 Chart ?! - SAS Support Communities

 

I asked to how to merge plots into one. It works. Still now, get one more quest, how to save the merged picture 

explicitly with a specified filename/location, such as c:\myPicture\_today_pic_01.jpg/png ?!

 

ods layout gridded columns=2 rows=2 advance=proc;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_1 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_2 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_3 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_4 x=cycle;
run;
ods layout end;
1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User

I think the best solution is using GTL within PROC TEMPLATE .

 

If it is simple scatter plot, you could try proc sgscatter.

data temp;
do x=1 to 20;
y1=ranuni(1);
y2=10*ranuni(2);
y3=100*ranuni(3);
y4=1000*ranuni(4);
output;
end;
run;


ods listing gpath='c:\temp\';
ods graphics/reset=index imagename='today_pic_01' imagefmt=png;
proc sgscatter data=temp;
plot (y1-y4)*x;
run;

View solution in original post

6 REPLIES 6
hellohere
Pyrite | Level 9

The given SAS codes generate the plot with default filename/directory. I like to save it into a specified filename/location though. 

hellohere
Pyrite | Level 9
30096  ods graphics on / reset imagename="new file name" imagefmt =jpeg;
30097  ods listing gpath = '%temp%';
30098  proc sgplot data=sashelp.class;
30099    scatter x=WEIGHT y=HEIGHT;
30100  run;

NOTE: PROCEDURE SGPLOT used (Total process time):
      real time           0.25 seconds
      cpu time            0.09 seconds

NOTE: Listing image output written to C:\Users\ADMINI~1\AppData\Local\Temp\2\new file name1.jpeg.
NOTE: There were 19 observations read from the data set SASHELP.CLASS.

imagename="new file name" works on single plot (PROC SGPLOT) above. BUT I like to save 4-into-1 picture. 

Also how to add a title-line on 4-into-1 picture?!

Ksharp
Super User

I think the best solution is using GTL within PROC TEMPLATE .

 

If it is simple scatter plot, you could try proc sgscatter.

data temp;
do x=1 to 20;
y1=ranuni(1);
y2=10*ranuni(2);
y3=100*ranuni(3);
y4=1000*ranuni(4);
output;
end;
run;


ods listing gpath='c:\temp\';
ods graphics/reset=index imagename='today_pic_01' imagefmt=png;
proc sgscatter data=temp;
plot (y1-y4)*x;
run;
DanH_sas
SAS Super FREQ

I agree with @Ksharp that, with this particular example, there is a lot of value in using PROC SGSCATTER instead. However, I thought it would be good to show everyone here how you can take the ODS LAYOUT example you had and turn it into a single PNG file.

 

Basically, you can use the ODS PRINTER destination with a PRINTER of PNG or PNG300 to write all of the output into the one image. The key is setting the PAPERSIZE (i.e the image size) and the content sizes to fit in the paper size. The FILE option can be used to specify the path and filename for the image. Here is an example using the ODS LAYOUT content you posted:

 

ods _all_ close;
options nodate nonumber;
options papersize=(7.35in 5.40in);
options leftmargin="0.001in" rightmargin="0.001in";
title;
ods printer printer=png file="composite.png";
ods layout gridded columns=2 rows=2 advance=proc
    column_gutter=0.1in row_gutter=0.1in;
ods graphics / width=3.5in;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_1 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_2 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_3 x=cycle;
run;
proc sgplot data=sashelp.applianc(where=(cycle<=20));
scatter y=units_4 x=cycle;
run;
ods layout end;

 

PaigeMiller
Diamond | Level 26

PROC SGSCATTER could be a solution in some cases, but there could be other uses of ODS LAYOUT GRIDDED where one plot is a histogram and the next plot is a series plot, and so on, and PROC SGSCATTER is not a solution (and in fact, I have used ODS LAYOUT GRIDDED like I just explained where they are not all scatterplots).

 

So this code is very helpful.

--
Paige Miller
hellohere
Pyrite | Level 9
Thanks a lot.

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 6 replies
  • 1206 views
  • 4 likes
  • 4 in conversation