BookmarkSubscribeRSS Feed
Ronein
Meteorite | Level 14

Hello

I want to create bar chart of following information in table "summary_b"

x-axis will have Y_Cat categories

y-axis will display PCT_SUM_Y

I want also to learn how to create this bar chart from original raw data (RawTbl table)

thank you

 

 

Data RawTbl;
input ID group $ Y;
cards;
1 a 10
2 a 20
3 a 30
4 b 15
5 b 30
6 b  45
7 c 60
8 c 75
9 c 90
10 c 80
;
run;

/*chart1*/
ods graphics on;
proc freq data=RawTbl;
tables group / plots=FreqPlot(scale=Percent) out=Freq1Out; /* save Percent variable */
run;


/*chart2*/
proc format;
value ffmt
0-40='0-40'
40-80='40-80'
80-100='80-100'
;
run;

ods graphics on;
proc freq data=RawTbl;
tables Y / plots=FreqPlot(scale=Percent) out=Freq1Out; /* save Percent variable */
format Y ffmt.;
run;

/*chart3*/
PROC SQL;
	create table summary_a  as
	select put(Y,ffmt.) as Y_Cat,
          sum(Y) as Sum_Y 
	from  RawTbl
	group by calculated Y_Cat
;
QUIT;
PROC SQL;
	create table summary_b  as
	select *,
          Sum_Y/sum(Sum_Y) as PCT_SUM_Y  format=percent9.1
	from  summary_a
;
QUIT;
/*Now I want to create  bar chart of Y_Cat (x-axis) ,PCT_SUM_Y (y-axis)*/
2 REPLIES 2
ed_sas_member
Meteorite | Level 14

Hi @Ronein 

 

Here is a way to create a hbar from summary_b:

axis1 label=none;                                                                                                                       
axis2 label=('your label') order=0 to 1 by 0.1 ;                                                                                                                                                                                                                                                                                                                                                     
title1 'Your title';                                                                                                                
                 
proc gchart data=summary_b;
	hbar Y_Cat / sumvar = PCT_SUM_Y maxis=axis1 raxis=axis2  nostats;
run;

Otherwise, you can simplify your code:

proc format;
value ffmt
0-40='0-40'
40-80='40-80'
80-100='80-100'
;
run;

Data RawTbl_bis;
	set rawtbl;
	format Y_class ffmt.;
	Y_class = Y;
run;

proc tabulate data=RawTbl_bis out=summary_stat;
	var Y;
	class Y_class;
	tables Y_class*(Y* (sum pctsum));
	format Y ffmt.;
run;

axis1 label=none;                                                                                                                       
axis2 label=('your label') order=0 to 100 by 10 ;                                                                                                                                                                                                                                                                                                                                                     
title1 'Your title';                                                                                                                
                 
proc gchart data=summary_stat;
	hbar Y_class / sumvar = Y_pctsum_0_Y maxis=axis1 raxis=axis2 ;
run;
Reeza
Super User

Create another variable and use that in the data set as the weight. A view would also work. 

 

 

Data RawTbl;
input ID group $ Y;
Z = Y;
cards;
1 a 10
2 a 20
3 a 30
4 b 15
5 b 30
6 b  45
7 c 60
8 c 75
9 c 90
10 c 80
;
run;

/*chart2*/
proc format;
value ffmt
0-40='0-40'
40-80='40-80'
80-100='80-100'
;
run;

proc freq data=rawtbl;
table y / plots=freqplot (scale=percent);
weight z;
format y ffmt.;
run;

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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
  • 2 replies
  • 418 views
  • 0 likes
  • 3 in conversation