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

I have some data on adverse events that I'd like to show in sgplot. I want the xaxis to be ordered by descending frequency.

When I use the CATEGORYORDER=RESPDESC it works. However, when I want to group the vbar this option is ignored. 

proc sgplot data=AE_data;

  vbar site_ID / CATEGORYORDER=RESPDESC group=severity ; 

run;


I do not want to use discreteorder=data because this will order the data by Site_ID, not by the frequency of site_id. How do I get an output with the vbar sorted by frequency of site_id?

1 ACCEPTED SOLUTION

Accepted Solutions
GraphGuy
Meteorite | Level 14

If sgplot can't easily create the chart you want, perhaps Proc Gchart would be a better choice?...

proc gchart data=sashelp.cars;

vbar type / type=freq outside=freq subgroup=origin descending;

run;

foo.png

View solution in original post

5 REPLIES 5
Jay54
Meteorite | Level 14

Yes, I see the problem.  When GROUP is specified, you are getting group order of descending response, but discrete order of ascending (default).  This is a bug we will need to addess.

The way out I see is to summarize the data using proc means, sort by descending (sum of) frequencies and then use VBAR to draw the data with N as the response variable and DiscreteOrder=Data.  Here is an example.

FreqPlot.png

sarahsasuser
Quartz | Level 8

Thanks Sanjay. Because the data are character, I ran a PROC FREQ on the site_id, output those counts to a dataset, and merged this new freq dataset with the original dataset. Then I sorted on frequency before plotting. Is there an easier/smarter way to obtain frequencies without merging the output and original datasets? I have multiple variables that I need to graph and then plot by descending frequency in this dataset. Therefore, I'm running several frequencies and outputing to multiple datasets and then merging these datasets with the original.

Jay54
Meteorite | Level 14

I did it a little differently.  My code is attached.  Only issue in this case is that the segments within the bars are not correctly sorted in descending order due to another bug in SGPLOT.  :smileyplain:  But, if you don't care about that, you are good to go.  If you do care about it, then you need another adjustment.

GraphGuy
Meteorite | Level 14

If sgplot can't easily create the chart you want, perhaps Proc Gchart would be a better choice?...

proc gchart data=sashelp.cars;

vbar type / type=freq outside=freq subgroup=origin descending;

run;

foo.png

sarahsasuser
Quartz | Level 8

Yes, that's much easier. Using SGPLOT, I have to create frequency datasets, merge those datasets with the original, and then plot.

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
  • 5884 views
  • 3 likes
  • 3 in conversation