DropDropped
DropDropped

Reputation: 1273

Binned Bar chart using SAS

I'm trying to make a bar chart using SAS. I have multiple salaries data and I'd like to show a bar chart with the frequencies of these salaries. I've made this:

ODS GRAPHICS ON;
PROC FREQ DATA=WORKERS.SORT ORDER=INTERNAL;
    TABLES salaries / NOCUM  SCORES=TABLE plots(only)=freq;
RUN;
ODS GRAPHICS OFF;

It works, the problem is, that now I can see all (hundreds) of the salaries on the x-axis. I'd like to have just intervals of these salaries (like 20) so that I can get a more readable chart. I just can't find out how to do it. I've also tried it with this:

PROC CHART DATA=WORK.SORT;
    vbar salaries;
RUN;

but that's a text representation of the chart, so I can't use it.

Upvotes: 2

Views: 1327

Answers (3)

Robert Penridge
Robert Penridge

Reputation: 8513

And just for completeness, I'll add another solution in case you want more control over the chart's appearance. Using the Graphics Template Language you can create some very nice looking charts.

The proc template statement defines how the chart will look. The sgrender runs the chart against the specified dataset. There's all kinds of options that are best explored in the online doc: http://support.sas.com/documentation/cdl/en/grstatgraph/65377/HTML/default/viewer.htm#p1sxw5gidyzrygn1ibkzfmc5c93m.htm

I've just taken the sample they provided and added the / nbins=20 option to have it automatically group into 20 bins. It also has options for start and end bin, bin size, etc..

proc template;
  define statgraph histogram;
    begingraph;
      entrytitle "Histogram of Vehicle Weights";
      layout overlay /
        xaxisopts=(label="Vehicle Weight (LBS)")
        yaxisopts=(griddisplay=on);
        histogram weight / nbins=20;
      endlayout;       
    endgraph;
  end;
run;

proc sgrender data=sashelp.cars template=histogram;
run;

Upvotes: 0

DomPazz
DomPazz

Reputation: 12465

Use PROC UNIVARIATE with the HISTOGRAM statement. http://support.sas.com/documentation/cdl/en/procstat/66703/HTML/default/viewer.htm#procstat_univariate_toc.htm

ods html;
proc univariate data=sashelp.cars noprint;
var msrp;
histogram;
run;

There are options for specifying bin size:

ods html;
proc univariate data=sashelp.cars noprint;
var msrp;
histogram / midpoints=30000 to 180000 by 30000;
run;

Upvotes: 2

Robert Penridge
Robert Penridge

Reputation: 8513

You can create a format and apply the format to the variable you want to group into buckets. Here's an example:

proc format ;
  value myfmt
  low - 13 = '13 and Under'
  14 - high = '14 and Above';
run;


ODS GRAPHICS ON;
PROC FREQ DATA=sashelp.class ORDER=INTERNAL;
    format age myfmt.;
    TABLES age / NOCUM  SCORES=TABLE plots(only)=freq;
RUN;
ODS GRAPHICS OFF;

Upvotes: 2

Related Questions