-
Notifications
You must be signed in to change notification settings - Fork 3
/
SASRUsersGroupProcBoxplot.sas
177 lines (143 loc) · 4.64 KB
/
SASRUsersGroupProcBoxplot.sas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
*Adapted from code found here: http://www2.sas.com/proceedings/sugi28/228-28.pdf;
proc print data=sashelp.heart; run;
proc freq data=sashelp.heart;
tables weight_status;
run;
data boxplot; set sashelp.heart;
where weight_status ne 'Underweight';
if sex='Female' and weight_status='Normal' then sexweight=1;
if sex='Female' and weight_status='Overweight' then sexweight=2;
if sex='Male' and weight_status='Normal' then sexweight=4;
if sex='Male' and weight_status='Overweight' then sexweight=5;
run;
proc format;
value boxgr
1= 'Normal Weight'
2= 'Overweight'
3= ' '
4= ' Normal Weight'
5= 'Overweight'
;
run;
*************************************************************************************************************************
Basic plot with the usual options
*************************************************************************************************************************;
data f; set boxplot;
format sexweight boxgr.;
run;
proc sort data=f;
by sexweight;
run;
goptions reset=all;
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
;
label cholesterol = 'Cholesterol Level';
run;
quit;
*************************************************************************************************************************
To remove the blue color from the boxplot, use cboxfill option
*************************************************************************************************************************;
goptions reset=all;
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
cboxfill=empty
;
label cholesterol = 'Cholesterol Level';
run;
quit;
*************************************************************************************************************************
To remove the blue color from the symbol indicating the mean (+), use symbol statement
*************************************************************************************************************************;
goptions reset=all;
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
cboxfill=empty
;
label cholesterol = 'Cholesterol Level';
symbol1 v=plus c=black;
run;
quit;
*************************************************************************************************************************
To make the blocking variable header white requires creating a color variable and using the cblockvar option
*************************************************************************************************************************;
data temp; set boxplot;
color_variable='white';
run;
data f; set temp;
format sexweight boxgr.;
run;
proc sort data=f;
by sexweight;
run;
goptions reset=all;
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
cboxfill=empty
cblockvar=color_variable
;
label cholesterol = 'Cholesterol Level';
symbol1 v=plus c=black;
run;
quit;
*************************************************************************************************************************
To make the font in the blocking variable header larger, use the height option (will change all font)
*************************************************************************************************************************;
goptions reset=all;
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
cboxfill=empty
cblockvar=color_variable
height=2.4
;
label cholesterol = 'Cholesterol Level';
symbol1 v=plus c=black;
run;
quit;
*************************************************************************************************************************
To output the file to a giff image add in the gsfname, dev, gsfmode, and filename options
-gsfname=outfile - tells SAS that the internal name for your image is outfile
-dev=gif - tells SAS to output the image to a gif file type
-gsfmode=replace - tells SAS that if you run the code again you want to replace the existing file
-filename outgfile "file_path_name\name_of_output_file.gif"- tells SAS the specific location and name of the output file
Note: you won't want to use this option if you want to do edit the image before saving
i.e. to center the labels in the blocking variable header
*************************************************************************************************************************;
goptions reset=all;
goptions gsfname=outgfile dev=gif gsfmode=replace;
filename outgfile
"C:\Users\sumougrad\Desktop\boxplot image.gif";
proc boxplot data=f;
plot cholesterol*sexweight
(sex) /
nohlabel
NPANELPOS=5 BLOCKPOS=2
CONTINUOUS
cboxfill=empty
cblockvar=color_variable
height=2.4
;
label cholesterol = 'Cholesterol Level';
symbol1 v=plus c=black;
run;
quit;