Desktop productivity for business analysts and programmers

SGPLOT series interval

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 89
Accepted Solution

SGPLOT series interval

Let's say I have this code:

proc sgplot data=have;
series x=var y=var2;
series x=var y=var3;
series x=var y=var4;
xaxis grid values = (0 to 23 by 1);
run;

is there a way I can display each series in different intervals like:

 

series 1: from 0-10 only

series 2: 0-12 and 18-23 BREAK;

series 3: 12-19

?

 

I don't want to change the axis size


Accepted Solutions
Solution
2 weeks ago
Super User
Posts: 13,941

Re: SGPLOT series interval


@matt23 wrote:
So there's no way to do this without playing with the data?

Not very difficult:

data plot;
   set have;
   where 0 le x le 23;
   if not (0 le x le 10) then var2=.;
   if 12 lt x lt 18 then var3=.
   if not (12 le x le 19) var4=.;
run;

proc sgplot data=plot;
series x=var y=var2 / break;
series x=var y=var3 / break;
series x=var y=var4 / break;
xaxis grid values = (0 to 23 by 1);
run;

should do it.

 

 

Try it in Excel. See how much manipulation you do.

Some other approaches might involve adding group variables and assigning attributes to make certain groups "invisible" but that's more work I think.

View solution in original post


All Replies
Super User
Posts: 13,941

Re: SGPLOT series interval

the main piece would be to have y variable values as missing for the X values you don't want the series ploted. Then use the option BREAK on the plot statements. Any x value with a missing y would the "break" the series connection.

 

But the DATA has to support this, not just the plot statements.

Frequent Contributor
Posts: 89

Re: SGPLOT series interval

So there's no way to do this without playing with the data?
Solution
2 weeks ago
Super User
Posts: 13,941

Re: SGPLOT series interval


@matt23 wrote:
So there's no way to do this without playing with the data?

Not very difficult:

data plot;
   set have;
   where 0 le x le 23;
   if not (0 le x le 10) then var2=.;
   if 12 lt x lt 18 then var3=.
   if not (12 le x le 19) var4=.;
run;

proc sgplot data=plot;
series x=var y=var2 / break;
series x=var y=var3 / break;
series x=var y=var4 / break;
xaxis grid values = (0 to 23 by 1);
run;

should do it.

 

 

Try it in Excel. See how much manipulation you do.

Some other approaches might involve adding group variables and assigning attributes to make certain groups "invisible" but that's more work I think.

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 114 views
  • 0 likes
  • 2 in conversation