BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
Anita_n
Pyrite | Level 9

Dear all,

assuming I have a a bar chart plotted using sgplot and I wish to add behind the absolute values the relative values in bracket. Is this possible? If yes please any help. I created a label with both values and assigned this as follows seglabel=mylabel but this doesnt work

 

Anita_n_0-1677593734344.png

 

1 ACCEPTED SOLUTION

Accepted Solutions
yabwon
Onyx | Level 15

try this:

data have;                                          
infile datalines dlm="|";                                   
input period : $ 10.  drug : $ 15.  visit dosis 2.;
datalines; 
2000-2005|Cefalexin     |1|12
2000-2005|Calcipotriol  |1|16
2000-2005|Folic acid    |1|26
2000-2005|Piriton       |1|3 
2000-2005|Fentanyl      |1|36
2000-2005|Folic acid    |1|26
2000-2005|Co-beneldopa  |1|35
2000-2005|Folic acid    |1|26
2000-2005|Cefalexin     |1|11
2000-2005|Fentanyl      |1|35
2006-2011|Allopurinol   |1|33
2006-2011|Folic acid    |1|27
2006-2011|Cefalexin     |1|11
2006-2011|Allopurinol   |1|33
2006-2011|Cefalexin     |1|11
2006-2011|Folic acid    |1|26
2006-2011|Piriton       |1|3 
2006-2011|Folic acid    |1|27
2006-2011|Allopurinol   |1|33
2006-2011|Piriton       |1|3 
2006-2011|Cefalexin     |1|11
2011-2022|Piriton       |1|3 
2011-2022|Cefalexin     |1|11
2011-2022|Cefalexin     |1|12
2011-2022|Cefalexin     |1|11
2011-2022|Cefalexin     |1|11
2011-2022|Baclofen      |1|35
2011-2022|Diclofenac    |1|22
2011-2022|Diclofenac    |1|22
2011-2022|Co-beneldopa  |1|35
2011-2022|Co-beneldopa  |1|3
2011-2022|Other Piriton |1|22
2000-2005|Co-beneldopa  |2|3 
2000-2005|Folic acid    |2|15
2000-2005|Cefalexin     |2|14
2000-2005|Fentanyl      |2|11
2000-2005|Allopurinol   |2|3 
2000-2005|Folic acid    |2|3 
2000-2005|Cefalexin     |2|5 
2000-2005|Allopurinol   |2|15
2000-2005|Cefalexin     |2|35
2006-2011|Folic acid    |2|16
2006-2011|Piriton       |2|22
2006-2011|Folic acid    |2|38
2006-2011|Allopurinol   |2|11
2006-2011|Piriton       |2|7 
2006-2011|Cefalexin     |2|11
2006-2011|Piriton       |2|11
2006-2011|Cefalexin     |2|15
2006-2011|Cefalexin     |2|17
2006-2011|Cefalexin     |2|11
2011-2022|Cefalexin     |2|33
2011-2022|Baclofen      |2|77
2011-2022|Diclofenac    |2|25
2011-2022|Acrivastine   |2|12
2011-2022|Acrivastine   |2|8 
2011-2022|Acrivastine   |2|15
2011-2022|Acrivastine   |2|20
2011-2022|Acrivastine   |2|6 
2011-2022|Acrivastine   |2|20
2011-2022|Acrivastine   |2|33
2011-2022|Other Piriton |2|14
2000-2005|Cefalexin     |3|14
2000-2005|Calcipotriol  |3|18
2000-2005|Folic acid    |3|16
2000-2005|Piriton       |3|15
2000-2005|Fentanyl      |3|19
2000-2005|Folic acid    |3|20
2000-2005|Co-beneldopa  |3|25
2000-2005|Folic acid    |3|52
2000-2005|Cefalexin     |3|25
2000-2005|Fentanyl      |3|16
2006-2011|Allopurinol   |3|8 
2006-2011|Folic acid    |3|2 
2006-2011|Cefalexin     |3|55
2006-2011|Allopurinol   |3|70
2006-2011|Cefalexin     |3|18
2006-2011|Folic acid    |3|1 
2006-2011|Piriton       |3|20
2006-2011|Folic acid    |3|11
2006-2011|Allopurinol   |3|14
2006-2011|Piriton       |3|7 
2006-2011|Cefalexin     |3|33
2011-2022|Piriton       |3|20
2011-2022|Cefalexin     |3|15
2011-2022|Cefalexin     |3|12
2011-2022|Cefalexin     |3|77
2011-2022|Cefalexin     |3|6 
2011-2022|Acrivastine   |3|44
2011-2022|Acrivastine   |3|7 
2011-2022|Acrivastine   |3|25
2011-2022|Acrivastine   |3|11
2011-2022|Acrivastine   |3|9 
2011-2022|Other Piriton |3|8
;                                  
run;  
                             
proc print;
run;

proc sql;
create table have2 as select period, drug, visit,  sum(dosis) as SumDosis from have group by period, drug, visit;

create table sumtotal as select period,visit, sum(SumDosis) as totals  from have2  group by period, visit;

create table have3 as select a.*, b.totals, SumDosis/totals as percentage format percent8.2 from have2 as 
a, sumtotal as b where a.visit=b.visit and a.period=b.period;

quit;

proc print;
run;


proc sort data=have3;
by period visit drug;
run;

data have4;
set have3;
by period visit;
if first.visit then tot=0;
pos= tot + SumDosis/2;
tot + SumDosis;
length N_percentage $15 ;
N_Percentage=catx(" ", SumDosis, "(", put(percentage, percent8.2), ")");
keep period drug visit SumDosis N_percentage pos;
run;

proc print;
run;


ods graphics / width=1200px height=1000px;
proc sgpanel data = have4;

  styleattrs datacolors=(
CXfc8d59
CXfdbb84
CXfdd49e
CXfee8c8
CXfff7ec
CXffffff
CXfff7fb
CXece7f2
CXd0d1e6
CXa6bddb
CX74a9cf
);
  panelby period / columns=3 novarname noborder;
  vbarparm  category=visit response=SumDosis / group=drug grouporder=data  groupdisplay=stack
  DATASKIN=NONE OUTLINE OUTLINEATTRS=(color=black THICKNESS=1) FILL 
  ;
  text x=visit y=pos text=N_Percentage / group=drug TEXTATTRS=(Color=black Family="Arial" Size=6 Weight=bold);
run;

should give you:

yabwon_0-1677667617613.png

 

Bart

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



View solution in original post

18 REPLIES 18
yabwon
Onyx | Level 15

"absolute values the relative values in bracket." - relative to what? Do you want to have something like: "10 (30%)" ?

 

Bart

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



Anita_n
Pyrite | Level 9

Yes,  that is what I mean. The percentages in bracket

yabwon
Onyx | Level 15

something like this:

data have;
input year val group $;
cards;
2012 2 g
2012 6 r
2012 1 b
2013 7 r
2013 1 b
2014 2 g
2015 3 r
2016 1 g
2016 4 r
2017 2 g
2017 5 r
2017 1 b
;
run;

data have2;

  total = 0;
  do _N_ = 1 by 1 until(last.year);
    set have;
    by year;
    total + val;     
  end;

  tot = 0;
  do _N_ = 1 to _N_;
    set have;
    pos = tot + 0.5*val;
    tot + val;
    length vallabel $ 20;
    vallabel = cats(val,"(", put(val/total, percent10.2 ),")");
    output;
  end;

run;

proc print;
run;

proc sgplot data = have2;
  STYLEATTRS DATACOLORS=(lightgreen lightred lightblue);

  VBARPARM  category=year response=val / group=group 
   GROUPORDER=DATA 
   GROUPDISPLAY=STACK
  ;
  text x=year y=pos text=vallabel / group=group
   TEXTATTRS=(Color=black Family="Arial" Size=8 Weight=bold)
  ;
run;

?

bart

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



Anita_n
Pyrite | Level 9

Thankyou for that, very interesting to know that there is a possibility like this. Am still tring it. Haven't got it right with the positioning (pos). I will let you know if it worked

Anita_n
Pyrite | Level 9

@yabwon since am still not getting the positioning let me post how my data really looks like maybe you can help

data have;                                          
infile datalines;                                   
input period $10.  drug $15.  visit dosis 2.;
datalines; 
2000-2005	Cefalexin       1 12     
2000-2005	Calcipotriol	1 16     
2000-2005	Folic acid	    1 26     
2000-2005	Piriton         1 3      
2000-2005	Fentanyl	    1 36     
2000-2005 Folic acid 1 26 2000-2005 Co-beneldopa 1 35 2000-2005 Folic acid 1 26 2000-2005 Cefalexin 1 11 2000-2005 Fentanyl 1 35 2006-2011 Allopurinol 1 33 2006-2011 Folic acid 1 27 2006-2011 Cefalexin 1 11 2006-2011 Allopurinol 1 33 2006-2011 Cefalexin 1 11 2006-2011 Folic acid 1 26 2006-2011 Piriton 1 3 2006-2011 Folic acid 1 27 2006-2011 Allopurinol 1 33 2006-2011 Piriton 1 3 2006-2011 Cefalexin 1 11 2011-2022 Piriton 1 3 2011-2022 Cefalexin 1 11 2011-2022 Cefalexin 1 12 2011-2022 Cefalexin 1 11 2011-2022 Cefalexin 1 11 2011-2022 Baclofen 1 35 2011-2022 Diclofenac 1 22 2011-2022 Diclofenac 1 22 2011-2022 Co-beneldopa 1 35 2011-2022 Co-beneldopa 1 3 2011-2022 Other Piriton 1 22 2000-2005 Co-beneldopa 2 3 2000-2005 Folic acid 2 15 2000-2005 Cefalexin 2 14 2000-2005 Fentanyl 2 11 2000-2005 Allopurinol 2 3 2000-2005 Folic acid 2 3 2000-2005 Cefalexin 2 5 2000-2005 Allopurinol 2 15 2000-2005 Cefalexin 2 35 2006-2011 Folic acid 2 16 2006-2011 Piriton 2 22 2006-2011 Folic acid 2 38 2006-2011 Allopurinol 2 11 2006-2011 Piriton 2 7 2006-2011 Cefalexin 2 11 2006-2011 Piriton 2 11 2006-2011 Cefalexin 2 15 2006-2011 Cefalexin 2 17 2006-2011 Cefalexin 2 11 2011-2022 Cefalexin 2 33 2011-2022 Baclofen 2 77 2011-2022 Diclofenac 2 25 2011-2022 Acrivastine 2 12 2011-2022 Acrivastine 2 8 2011-2022 Acrivastine 2 15 2011-2022 Acrivastine 2 20 2011-2022 Acrivastine 2 6 2011-2022 Acrivastine 2 20 2011-2022 Acrivastine 2 33 2011-2022 Other Piriton 2 14 2000-2005 Cefalexin 3 14 2000-2005 Calcipotriol 3 18 2000-2005 Folic acid 3 16 2000-2005 Piriton 3 15 2000-2005 Fentanyl 3 19 2000-2005 Folic acid 3 20 2000-2005 Co-beneldopa 3 25 2000-2005 Folic acid 3 52 2000-2005 Cefalexin 3 25 2000-2005 Fentanyl 3 16 2006-2011 Allopurinol 3 8 2006-2011 Folic acid 3 2 2006-2011 Cefalexin 3 55 2006-2011 Allopurinol 3 70 2006-2011 Cefalexin 3 18 2006-2011 Folic acid 3 1 2006-2011 Piriton 3 20 2006-2011 Folic acid 3 11 2006-2011 Allopurinol 3 14 2006-2011 Piriton 3 7 2006-2011 Cefalexin 3 33 2011-2022 Piriton 3 20 2011-2022 Cefalexin 3 15 2011-2022 Cefalexin 3 12 2011-2022 Cefalexin 3 77 2011-2022 Cefalexin 3 6 2011-2022 Acrivastine 3 44 2011-2022 Acrivastine 3 7 2011-2022 Acrivastine 3 25 2011-2022 Acrivastine 3 11 2011-2022 Acrivastine 3 9 2011-2022 Other Piriton 3 8 ; run; proc sql; create table have2 as select period, drug, visit, sum(dosis) as SumDosis from have group by period, drug, visit; create table sumtotal as select period,visit, sum(SumDosis) as totals from have2 group by period, visit; create table have3 as select a.*, b.totals, SumDosis/totals as percentage format percent8.2 from have2 as a, sumtotal as b where a.visit=b.visit and a.period=b.period; quit; data have4; set have3; length N_percentage $15 ; N_Percentage=catx(" ", SumDosis, "(", put(percentage, percent8.2), ")"); keep period drug visit SumDosis N_percentage; run; proc sort data have4; by period visit drug; run; proc sgpanel data = have4; styleattrs datacolors=(lightgreen lightred lightblue); panelby period /columns=3 novarname noborder; vbarparm category=visit response=SumDosis / group=drug grouporder=data datalabel seglabel groupdisplay=stack; *text x=year y=pos text=vallabel / group=group TEXTATTRS=(Color=black Family="Arial" Size=8 Weight=bold) ; run;

 This is how it looks like when I apply your code:

data have5;
tot = 0;
  do _N_ = 1 to _N_;
    set have4;
    pos = tot + 0.5*SumDosis;
    tot + SumDosis;
      glabel = N_percentage;
    output;
  end;

run;

proc sgpanel data = have5;
styleattrs datacolors=(lightgreen lightred lightblue);
panelby period /columns=3 novarname noborder;
 vbarparm  category=visit response=SumDosis / group=drug grouporder=data  datalabel  groupdisplay=stack;
  text x=visit y=pos text=glabel / group=drug TEXTATTRS=(Color=black Family="Arial" Size=8 Weight=bold)
  ;
run;

 

yabwon
Onyx | Level 15

try this:

data have;                                          
infile datalines dlm="|";                                   
input period : $ 10.  drug : $ 15.  visit dosis 2.;
datalines; 
2000-2005|Cefalexin     |1|12
2000-2005|Calcipotriol  |1|16
2000-2005|Folic acid    |1|26
2000-2005|Piriton       |1|3 
2000-2005|Fentanyl      |1|36
2000-2005|Folic acid    |1|26
2000-2005|Co-beneldopa  |1|35
2000-2005|Folic acid    |1|26
2000-2005|Cefalexin     |1|11
2000-2005|Fentanyl      |1|35
2006-2011|Allopurinol   |1|33
2006-2011|Folic acid    |1|27
2006-2011|Cefalexin     |1|11
2006-2011|Allopurinol   |1|33
2006-2011|Cefalexin     |1|11
2006-2011|Folic acid    |1|26
2006-2011|Piriton       |1|3 
2006-2011|Folic acid    |1|27
2006-2011|Allopurinol   |1|33
2006-2011|Piriton       |1|3 
2006-2011|Cefalexin     |1|11
2011-2022|Piriton       |1|3 
2011-2022|Cefalexin     |1|11
2011-2022|Cefalexin     |1|12
2011-2022|Cefalexin     |1|11
2011-2022|Cefalexin     |1|11
2011-2022|Baclofen      |1|35
2011-2022|Diclofenac    |1|22
2011-2022|Diclofenac    |1|22
2011-2022|Co-beneldopa  |1|35
2011-2022|Co-beneldopa  |1|3
2011-2022|Other Piriton |1|22
2000-2005|Co-beneldopa  |2|3 
2000-2005|Folic acid    |2|15
2000-2005|Cefalexin     |2|14
2000-2005|Fentanyl      |2|11
2000-2005|Allopurinol   |2|3 
2000-2005|Folic acid    |2|3 
2000-2005|Cefalexin     |2|5 
2000-2005|Allopurinol   |2|15
2000-2005|Cefalexin     |2|35
2006-2011|Folic acid    |2|16
2006-2011|Piriton       |2|22
2006-2011|Folic acid    |2|38
2006-2011|Allopurinol   |2|11
2006-2011|Piriton       |2|7 
2006-2011|Cefalexin     |2|11
2006-2011|Piriton       |2|11
2006-2011|Cefalexin     |2|15
2006-2011|Cefalexin     |2|17
2006-2011|Cefalexin     |2|11
2011-2022|Cefalexin     |2|33
2011-2022|Baclofen      |2|77
2011-2022|Diclofenac    |2|25
2011-2022|Acrivastine   |2|12
2011-2022|Acrivastine   |2|8 
2011-2022|Acrivastine   |2|15
2011-2022|Acrivastine   |2|20
2011-2022|Acrivastine   |2|6 
2011-2022|Acrivastine   |2|20
2011-2022|Acrivastine   |2|33
2011-2022|Other Piriton |2|14
2000-2005|Cefalexin     |3|14
2000-2005|Calcipotriol  |3|18
2000-2005|Folic acid    |3|16
2000-2005|Piriton       |3|15
2000-2005|Fentanyl      |3|19
2000-2005|Folic acid    |3|20
2000-2005|Co-beneldopa  |3|25
2000-2005|Folic acid    |3|52
2000-2005|Cefalexin     |3|25
2000-2005|Fentanyl      |3|16
2006-2011|Allopurinol   |3|8 
2006-2011|Folic acid    |3|2 
2006-2011|Cefalexin     |3|55
2006-2011|Allopurinol   |3|70
2006-2011|Cefalexin     |3|18
2006-2011|Folic acid    |3|1 
2006-2011|Piriton       |3|20
2006-2011|Folic acid    |3|11
2006-2011|Allopurinol   |3|14
2006-2011|Piriton       |3|7 
2006-2011|Cefalexin     |3|33
2011-2022|Piriton       |3|20
2011-2022|Cefalexin     |3|15
2011-2022|Cefalexin     |3|12
2011-2022|Cefalexin     |3|77
2011-2022|Cefalexin     |3|6 
2011-2022|Acrivastine   |3|44
2011-2022|Acrivastine   |3|7 
2011-2022|Acrivastine   |3|25
2011-2022|Acrivastine   |3|11
2011-2022|Acrivastine   |3|9 
2011-2022|Other Piriton |3|8
;                                  
run;  
                             
proc print;
run;

proc sql;
create table have2 as select period, drug, visit,  sum(dosis) as SumDosis from have group by period, drug, visit;

create table sumtotal as select period,visit, sum(SumDosis) as totals  from have2  group by period, visit;

create table have3 as select a.*, b.totals, SumDosis/totals as percentage format percent8.2 from have2 as 
a, sumtotal as b where a.visit=b.visit and a.period=b.period;

quit;

proc print;
run;


proc sort data=have3;
by period visit drug;
run;

data have4;
set have3;
by period visit;
if first.visit then tot=0;
pos= tot + SumDosis/2;
tot + SumDosis;
length N_percentage $15 ;
N_Percentage=catx(" ", SumDosis, "(", put(percentage, percent8.2), ")");
keep period drug visit SumDosis N_percentage pos;
run;

proc print;
run;


ods graphics / width=1200px height=1000px;
proc sgpanel data = have4;

  styleattrs datacolors=(
CXfc8d59
CXfdbb84
CXfdd49e
CXfee8c8
CXfff7ec
CXffffff
CXfff7fb
CXece7f2
CXd0d1e6
CXa6bddb
CX74a9cf
);
  panelby period / columns=3 novarname noborder;
  vbarparm  category=visit response=SumDosis / group=drug grouporder=data  groupdisplay=stack
  DATASKIN=NONE OUTLINE OUTLINEATTRS=(color=black THICKNESS=1) FILL 
  ;
  text x=visit y=pos text=N_Percentage / group=drug TEXTATTRS=(Color=black Family="Arial" Size=6 Weight=bold);
run;

should give you:

yabwon_0-1677667617613.png

 

Bart

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



Anita_n
Pyrite | Level 9

@yabwon why does the datalabel not show anymore? Does it have any thing to do with the TEXT-Statement?

yabwon
Onyx | Level 15

I removed: 

 datalabel seglabel

from the code.

 

B.

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



Anita_n
Pyrite | Level 9

@yabwon  I added datalabel but it doesn't work

yabwon
Onyx | Level 15

Could you put a print screen here, and also the log from the proc sgplot?

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



yabwon
Onyx | Level 15

Screen shot of the _graph_, and _text_ of the log.

 

B.

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



Anita_n
Pyrite | Level 9

Here is the code:

data have4;
set have3;
by period visit;
if first.visit then tot=0;
pos= tot + SumDosis/2;
tot + SumDosis;
length N_percentage $15 ;
N_Percentage=catx(" ", SumDosis, "(", put(percentage, percent8.2), ")");
keep period drug visit SumDosis N_percentage pos;
run;


ods graphics / width=1200px height=1000px;
proc sgpanel data = have4 noautolegend;
styleattrs datacolors=(lightgreen lightred lightblue);
panelby period /columns=3 novarname noborder;
vbarparm  category=visit response=SumDosis / group=drug  grouporder=data datalabel datalabelattrs=(color=black family="Arial" size=8 weight=bold) groupdisplay=stack name='a' ;
text x=visit y=pos text=n_percentage / group=drug TEXTATTRS=(Color=black Family="Arial" Size=8) name='b';
rowaxis values=(0 to 300 by 50);
keylegend 'a'/ position=bottom across=6 title=" ";
run;

The graph:

Anita_n_0-1677687074813.png

and log:

Anita_n_1-1677687168025.png

 

 

 

 

 

 

 

 

 

 

 

 

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 18 replies
  • 1305 views
  • 2 likes
  • 2 in conversation