BookmarkSubscribeRSS Feed
Top_Katz
Quartz | Level 8

Hi!  This is a real beginner question.  I want to graph two normal bell curves with different means and standard deviations, such that I get three colors, e.g., yellow for bell curve one only, blue for bell curve two only, and green for the overlap region (area under both bell curves).  Alternative would be cross-hatching.  I just want to easily distinguish the three possibilities.  Do I have to generate normal random samples first?  This is strictly for pictorial purposes, so I want the curves to look smooth, not like connect-the-dots.  I hope this is as easy as it sounds.  Thanks! 

5 REPLIES 5
Zard
SAS Employee

Here's one approach:


proc univariate data=sashelp.class noprint;
  class sex;
  histogram height/ nobars normal(noprint);
  ods ouput histogram=hist;
run;
data hist;
  set hist;
  lower=0;
run;
proc sgplot data=hist;
  series x=CurveX y=CurveY/group=Class1;
  band x=CurveX lower=lower upper=CurveY/group=Class1 transparency=.5;
run;

 

Zard_0-1688064773181.png

 

Top_Katz
Quartz | Level 8

Hi @Zard !  Thank you so much for your code.  From the picture you posted, it looks like it would do the trick.  There was a small typo ("output" misspelled as "ouput") that the compiler understood how to compensate for, but ultimately I was unable to run it, got the following error, which might be peculiar to my installation:

 

WARNING: Unsupported device 'SVG' for TAGSETS.SASREPORT13(EGSR) destination. Using default device 'PNG'.
NOTE: 18810 bytes written to
...
ERROR: Insufficient authorization to access /sasgrid/prd/config/app/Lev1/SASApp/sasgraph.svg.
WARNING: Output 'histogram' was not created. Make sure that the output object name, label, or path is spelled correctly. Also,
verify that the appropriate procedure options are used to produce the requested output object. For example, verify that
the NOPRINT option is not used.

 

Do you know how I could get around this?

 

Zard
SAS Employee

Sorry about the typo! 

 

Try adding the statement

 

ODS _ALL_ CLOSE;

 

at the beginning of your program. If you are specifying an ODS destination, with an ODS PDF or ODS RTF statement, for example, you might need to modify the syntax there as well. I'm not an expert in this area, so if this doesn't work, include your full code or log and someone else might weigh in, or you could contact Technical Support.

FreelanceReinh
Jade | Level 19

Hi @Top_Katz,

 

A similar approach can be used for arbitrarily specified probability densities:

data have;
do x=-8 to 8 by 0.01;
  y1=pdf('normal',x,-1,2);
  y2=pdf('normal',x,2,4);
  m=min(y1,y2);
  output;
end;
run;

proc sgplot data=have;
band x=x upper=y1 lower=m / fillattrs=(color=yellow)     legendlabel='N(-1, 4)' name='N1';
band x=x upper=y2 lower=m / fillattrs=(color=dodgerblue) legendlabel='N(2, 16)' name='N2';
band x=x upper=m  lower=0 / fillattrs=(color=palegreen);
xaxis values=(-8 to 8);
yaxis label='Probability Density';
keylegend 'N1' 'N2';
run;

normal_densities.png

Top_Katz
Quartz | Level 8

Hi @FreelanceReinh !  Thank you so much for your code!  Beautiful, just what I wanted, it ran like a charm and gave me the picture that you displayed.  Much appreciated!

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

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