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

Hello,

 

How can I increase the gap before the last confidence interval in forest plot using proc sgplot.

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User



data forest_subgroup;
infile cards truncover expandtabs;
  input Id Subgroup : $80. Count Percent : $40.  Count_test Percent_test  : $40.   Mean  Low  High   ci :$40. pvalue $;
  indentWt=1;
  ObsId=_n_; 
  datalines;
2 aa                        332  6.35(3.45)	111	 3.73(3.98) 	2.62   1.85  3.39  2.62(1.85,3.39)	<0.001
2 1~3                  	101	5.80(3.43)	36	3.75(4.38)	2.05 0.63 3.47   2.05(0.63,3.47)	0.005
2 4~7                    120	6.30(3.69)	37	2.73(3.65)	3.58 2.21 4.95   3.58(2.21,4.95)	<0.001
2 8~14                 	111	6.91(3.12)	38	4.69(3.75)	2.22 0.99 3.44   2.22(0.99,3.44)	<0.001
2 <6	                    78	3.44(2.73)	37	1.31(2.79)	2.13 1.04 3.21   2.13(1.04,3.21)	<0.001
2 >6                     	254	7.25(3.14)	74	4.94(3.95)	2.31 1.32 3.30   2.31(1.32,3.30)	<0.001
2 bbb	            162	6.32(3.79)	63	3.65(4.43)	2.67 1.50 3.83   2.67(1.50,3.83)	<0.001
2 cc	            170	6.38(3.09)	48	3.83(3.35)	2.55 1.54 3.56   2.55(1.54,3.56)	<0.001
2 dd 	298	6.41(3.22)	107	3.78(4.04)	2.64 1.78 3.49   2.64(1.78,3.49)	<0.001
2 ee		            364	6.23(3.36)	120	3.67(3.91)	2.56 1.78 3.35   2.56(1.78,3.35)	<0.001
2 ff                    	104	5.77(3.39)	37	3.65(4.37)	 2.12 0.53  3.71  2.12(0.53,3.71)	0.010
2 gg                 	135	6.23(3.56)	41	2.91(3.52)   3.32  2.07  4.57	3.32(2.07,4.57)	<0.001
1 xxxxxx
2 ALL                  	125	6.62(3.08)	42	4.44(3.79)	2.19  1.03  3.34   2.19(1.03,3.34)	<0.001
;
run;



data forest_subgroup;
 set forest_subgroup;
  indentWt=1;
  ObsId=_n_; 
run;
data forest_subgroup_2;
  set forest_subgroup nobs=n end=last;
  length text $20;
  val=mod(_N_-1, 6);
/*  if val eq 1 or val eq 2 or val eq 3 then ref=obsid;*/
 if mod(obsid,2 )=0 then ref=obsid;
  /*--Separate Subgroup headers and obs into separate columns--*/
  indentwt=2;
  if id=1 then indentWt=0;

  output;
  if last then do;
    call missing (subgroup, count, percent, Count_test ,Percent_test,   mean, low, high,  ci,
                   indentwt, val, ref ,pvalue);
        obsid=n+1; 
    xl=1; yl=n+1; text='P'; output;;
        xl=4; yl=n+1; text='T'; output;
  end;
  run;

/*--Define Format with Unicode for the left and right arrows--*/
proc format;;
  value $txt
  "T" = "test better (*ESC*){Unicode '2192'x}"
  "P" = "(*ESC*){Unicode '2190'x} placebo better";
run;

/*--Attribute maps for Subgroup Test attributes--*/
data attrmap;
  length textweight $10;
  id='text'; value='1'; textcolor='white'; textsize=15; textweight='bold'; output;
  id='text'; value='2'; textcolor='Black'; textsize=10; textweight='normal'; output;
run;
/*--Forest Plot--*/
options missing=' ';
/*ods listing style=htmlblue;*/
title j=l h=1.2  "                              test                      placebo";
/*ods listing gpath='c:\temp\' image_dpi=400;*/
/*ods graphics / reset width=5in height=3in imagename='Subgroup_Forest_SG_94';*/

ods graphics / reset width=9.6in height=4.5in   noborder noscale;
proc sgplot data=forest_subgroup_2 nowall noborder nocycleattrs dattrmap=attrmap noautolegend;
  format text $txt.;
  styleattrs axisextent=data;
  refline ref / lineattrs=(thickness=22 color=grayee);  
  highlow y=obsid low=low high=high /lowcap=serif highcap=serif lineattrs=(color=black); 
  scatter y=obsid x=mean / markerattrs=(symbol=squarefilled size=8 color=black );
  scatter y=obsid x=mean / markerattrs=(size=0) x2axis;
  refline 0 / axis=x;

  text x=xl y=obsid text=text / position=bottom contributeoffsets=none strip  textattrs=(size=10);
  yaxistable subgroup  / location=inside position=left textgroup=id labelattrs=(size=10)  
            LABELJUSTIFY=left  valueattrs=(size=10 ) 
             textgroupid=text indentweight=indentWt;
  yaxistable  Count Percent  Count_test Percent_test ci pvalue/ VALUEJUSTIFY=right
  location=inside position=left labelattrs=(size=10) valueattrs=(size=10) pad=(right=15px) ;
  yaxis reverse display=none colorbands=odd colorbandsattrs=(transparency=1)  ;
  xaxis display=(nolabel) values=(0 to 5 by 1);
  x2axis label='ODDS' display=(noline noticks novalues) labelattrs=(size=10)  ;
run;

Ksharp_0-1688644358081.png

 

View solution in original post

4 REPLIES 4
Ksharp
Super User
It would be better if you post a picture to explain this question.
oussema
Obsidian | Level 7

I need to increase the distance mentioned with a red arrow.

Please find it in the attached file. 

Ksharp
Super User



data forest_subgroup;
infile cards truncover expandtabs;
  input Id Subgroup : $80. Count Percent : $40.  Count_test Percent_test  : $40.   Mean  Low  High   ci :$40. pvalue $;
  indentWt=1;
  ObsId=_n_; 
  datalines;
2 aa                        332  6.35(3.45)	111	 3.73(3.98) 	2.62   1.85  3.39  2.62(1.85,3.39)	<0.001
2 1~3                  	101	5.80(3.43)	36	3.75(4.38)	2.05 0.63 3.47   2.05(0.63,3.47)	0.005
2 4~7                    120	6.30(3.69)	37	2.73(3.65)	3.58 2.21 4.95   3.58(2.21,4.95)	<0.001
2 8~14                 	111	6.91(3.12)	38	4.69(3.75)	2.22 0.99 3.44   2.22(0.99,3.44)	<0.001
2 <6	                    78	3.44(2.73)	37	1.31(2.79)	2.13 1.04 3.21   2.13(1.04,3.21)	<0.001
2 >6                     	254	7.25(3.14)	74	4.94(3.95)	2.31 1.32 3.30   2.31(1.32,3.30)	<0.001
2 bbb	            162	6.32(3.79)	63	3.65(4.43)	2.67 1.50 3.83   2.67(1.50,3.83)	<0.001
2 cc	            170	6.38(3.09)	48	3.83(3.35)	2.55 1.54 3.56   2.55(1.54,3.56)	<0.001
2 dd 	298	6.41(3.22)	107	3.78(4.04)	2.64 1.78 3.49   2.64(1.78,3.49)	<0.001
2 ee		            364	6.23(3.36)	120	3.67(3.91)	2.56 1.78 3.35   2.56(1.78,3.35)	<0.001
2 ff                    	104	5.77(3.39)	37	3.65(4.37)	 2.12 0.53  3.71  2.12(0.53,3.71)	0.010
2 gg                 	135	6.23(3.56)	41	2.91(3.52)   3.32  2.07  4.57	3.32(2.07,4.57)	<0.001
1 xxxxxx
2 ALL                  	125	6.62(3.08)	42	4.44(3.79)	2.19  1.03  3.34   2.19(1.03,3.34)	<0.001
;
run;



data forest_subgroup;
 set forest_subgroup;
  indentWt=1;
  ObsId=_n_; 
run;
data forest_subgroup_2;
  set forest_subgroup nobs=n end=last;
  length text $20;
  val=mod(_N_-1, 6);
/*  if val eq 1 or val eq 2 or val eq 3 then ref=obsid;*/
 if mod(obsid,2 )=0 then ref=obsid;
  /*--Separate Subgroup headers and obs into separate columns--*/
  indentwt=2;
  if id=1 then indentWt=0;

  output;
  if last then do;
    call missing (subgroup, count, percent, Count_test ,Percent_test,   mean, low, high,  ci,
                   indentwt, val, ref ,pvalue);
        obsid=n+1; 
    xl=1; yl=n+1; text='P'; output;;
        xl=4; yl=n+1; text='T'; output;
  end;
  run;

/*--Define Format with Unicode for the left and right arrows--*/
proc format;;
  value $txt
  "T" = "test better (*ESC*){Unicode '2192'x}"
  "P" = "(*ESC*){Unicode '2190'x} placebo better";
run;

/*--Attribute maps for Subgroup Test attributes--*/
data attrmap;
  length textweight $10;
  id='text'; value='1'; textcolor='white'; textsize=15; textweight='bold'; output;
  id='text'; value='2'; textcolor='Black'; textsize=10; textweight='normal'; output;
run;
/*--Forest Plot--*/
options missing=' ';
/*ods listing style=htmlblue;*/
title j=l h=1.2  "                              test                      placebo";
/*ods listing gpath='c:\temp\' image_dpi=400;*/
/*ods graphics / reset width=5in height=3in imagename='Subgroup_Forest_SG_94';*/

ods graphics / reset width=9.6in height=4.5in   noborder noscale;
proc sgplot data=forest_subgroup_2 nowall noborder nocycleattrs dattrmap=attrmap noautolegend;
  format text $txt.;
  styleattrs axisextent=data;
  refline ref / lineattrs=(thickness=22 color=grayee);  
  highlow y=obsid low=low high=high /lowcap=serif highcap=serif lineattrs=(color=black); 
  scatter y=obsid x=mean / markerattrs=(symbol=squarefilled size=8 color=black );
  scatter y=obsid x=mean / markerattrs=(size=0) x2axis;
  refline 0 / axis=x;

  text x=xl y=obsid text=text / position=bottom contributeoffsets=none strip  textattrs=(size=10);
  yaxistable subgroup  / location=inside position=left textgroup=id labelattrs=(size=10)  
            LABELJUSTIFY=left  valueattrs=(size=10 ) 
             textgroupid=text indentweight=indentWt;
  yaxistable  Count Percent  Count_test Percent_test ci pvalue/ VALUEJUSTIFY=right
  location=inside position=left labelattrs=(size=10) valueattrs=(size=10) pad=(right=15px) ;
  yaxis reverse display=none colorbands=odd colorbandsattrs=(transparency=1)  ;
  xaxis display=(nolabel) values=(0 to 5 by 1);
  x2axis label='ODDS' display=(noline noticks novalues) labelattrs=(size=10)  ;
run;

Ksharp_0-1688644358081.png

 

oussema
Obsidian | Level 7

This trick works well.

thank you !!

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