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

Hi,

I need to output a separat PDF plot file for each unit which aooear in my data set.

 

How can I make this simple and smart?????

 

The code below works but i need to loop it over the different units in the dataset so I output one plot per unit.

 

The dataset plot1 contains data for several units.

 

Hope you have some ideas.

 

Thanks in advance,

 

 

SAS program:

 

* data selection;

data plot1;

set masterdata(where=(year notin('2018') and unitname in(&unit.) )) other_sum;

run;

 

*make PDF file;

 

ods pdf file="C:/SGPLOT/&unit..pdf" notoc;

PROC SGPLOT DATA = plot1;

 

 

SERIES X = Reg_aar Y = var1/lineattrs=(color=green) ;

SERIES X = Reg_aar Y = var2 /lineattrs=(color=red) ;

SERIES X = Reg_aar Y =var3/lineattrs=(color=green pattern=dash) ;

SERIES X = Reg_aar Y =var4/lineattrs=(color=red pattern=dash);

yaxis values=(0 to 100 by 20);

 

TITLE 'Plot for &unit';

RUN;

ods pdf close;

 

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

You need to create a macro, and a %DO loop inside the macro.

 

Or, repeat the PROC SGPLOT code four times, and create only one SERIES statement in each repetition.

--
Paige Miller

View solution in original post

4 REPLIES 4
PaigeMiller
Diamond | Level 26

You need to create a macro, and a %DO loop inside the macro.

 

Or, repeat the PROC SGPLOT code four times, and create only one SERIES statement in each repetition.

--
Paige Miller
ANLYNG
Pyrite | Level 9

This is a nice solution and it works as expected...Thanks

 

ballardw
Super User

@ANLYNG wrote:

Hi,

I need to output a separat PDF plot file for each unit which aooear in my data set.

 

How can I make this simple and smart?????

 

The code below works but i need to loop it over the different units in the dataset so I output one plot per unit.

 

The dataset plot1 contains data for several units.

 

Hope you have some ideas.

 

Thanks in advance,

 

 

SAS program:

 

* data selection;

data plot1;

set masterdata(where=(year notin('2018') and unitname in(&unit.) )) other_sum;

run;

 

*make PDF file;

 

ods pdf file="C:/SGPLOT/&unit..pdf" notoc;

PROC SGPLOT DATA = plot1;

 

 

SERIES X = Reg_aar Y = var1/lineattrs=(color=green) ;

SERIES X = Reg_aar Y = var2 /lineattrs=(color=red) ;

SERIES X = Reg_aar Y =var3/lineattrs=(color=green pattern=dash) ;

SERIES X = Reg_aar Y =var4/lineattrs=(color=red pattern=dash);

yaxis values=(0 to 100 by 20);

 

TITLE 'Plot for &unit';

RUN;

ods pdf close;

 


First would be to change the data so that you have a single Y variable and another variable to indicate group membership. Use the Group=option to point to that variable to create different lines for each value of group.

SERIES X = Reg_aar Y = value/ group=ygroupvariable;

 

When you get that working then you could either use a macro loop over your list of variables to make the individual output PDF documents. However you haven't given us a connection between "unit" and your data so can't be too specific here.

 

This forum and others have many bits of looping over variable names to create files, table or graphs either using macro code or call execute statements with a control data set containing things such as your "unit" information.

 

 

 

Reeza
Super User

If you change your SGPLOT procedure to use a BY statement you can use the NEWFILE option on the ODS PDF statement to generate a new file for each BY group. 

However the naming convention sucks, it names it Report1, Report2. 

If you want control over the file names then I think you need to use a macro. 

 

Note that your Title statement needs double quotes to work properly. If you're using BY group processing look at customizing the title using the BYVAL values. 

 

ods pdf file="C:/SGPLOT/Unit.pdf" notoc newfile=ByGroup;
PROC SGPLOT DATA = plot1;
 
By UNIT;
SERIES X = Reg_aar Y = var1/lineattrs=(color=green) ;
SERIES X = Reg_aar Y = var2 /lineattrs=(color=red) ;
SERIES X = Reg_aar Y =var3/lineattrs=(color=green pattern=dash) ;
SERIES X = Reg_aar Y =var4/lineattrs=(color=red pattern=dash);
yaxis values=(0 to 100 by 20);
 
TITLE "Plot for &unit";
RUN;
ods pdf close;

@ANLYNG wrote:

Hi,

I need to output a separat PDF plot file for each unit which aooear in my data set.

 

How can I make this simple and smart?????

 

The code below works but i need to loop it over the different units in the dataset so I output one plot per unit.

 

The dataset plot1 contains data for several units.

 

Hope you have some ideas.

 

Thanks in advance,

 

 

SAS program:

 

* data selection;

data plot1;

set masterdata(where=(year notin('2018') and unitname in(&unit.) )) other_sum;

run;

 

*make PDF file;

 

ods pdf file="C:/SGPLOT/&unit..pdf" notoc;

PROC SGPLOT DATA = plot1;

 

 

SERIES X = Reg_aar Y = var1/lineattrs=(color=green) ;

SERIES X = Reg_aar Y = var2 /lineattrs=(color=red) ;

SERIES X = Reg_aar Y =var3/lineattrs=(color=green pattern=dash) ;

SERIES X = Reg_aar Y =var4/lineattrs=(color=red pattern=dash);

yaxis values=(0 to 100 by 20);

 

TITLE 'Plot for &unit';

RUN;

ods pdf close;

 


 

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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
  • 4 replies
  • 1729 views
  • 0 likes
  • 4 in conversation