SAS 中的成对条形图
Paired bar charts in SAS
我需要帮助创建一个条形图,将条形图配对在一起(按两个级别的组),四个时间段。这是我的 table 数据的样子,按 'Group':
排序
我已经想出如何绘制两组的均值,但一次只绘制一个时间段:
proc sgplot data=Testdata;
vbar Group /
response=Baseline
stat=mean
GROUPDISPLAY = CLUSTER;
run;
这让我明白了:
不过,我想"smoosh"把这两个柱子放在一起,让它们相互接触,然后添加方法,对于每个级别的组,对于其他三个时间段,都在一个情节。我试过将其他时间段添加到 'response=' 行(带逗号和不带逗号),但这不起作用。
请帮忙!
(我知道这有点贪心,但如果有人能告诉我如何根据组级别更改条形颜色,那就太好了)
TIA 寻求帮助。
您需要转置数据,以便拥有列 id
、group
、period
、result
。
VBAR 语句将从
VBAR GROUP
至
VBAR PERIOD
并且您可以使用 VBAR
功能
group = GROUP
datalabel = result
statlabel
示例:
data have;
call streaminit(123);
do group = 'A' , 'B';
do _n_ = 1 to ifn(group='A',6,11);
id + 1;
baseline = ifn(group='A', 2125, 4400) + rand('integer', 400) - 200;
period1 = ifn(group='A', 2425, 4100) + rand('integer', 600) - 300;
period2 = ifn(group='A', 1800, 3600) + rand('integer', 500) - 250;
period3 = ifn(group='A', 1600, 2800) + rand('integer', 500) - 250;
output;
end;
end;
label
baseline = 'Basline'
period1 = '14 Day Average'
period2 = '30 Day Average'
period3 = '60 Day Average'
;
run;
proc transpose data=have
out=plotdata (
rename=(
_name_ = period
_label_ = period_label
col1 = result
))
;
by id group notsorted;
var baseline period1-period3;
label period = ' ';
label period_label = ' ';
run;
ods html file='plot.html' style=plateau;
proc sgplot data=plotdata;
vbar period_label /
response = result
stat = mean
groupdisplay = cluster
group = group
datalabel = result statlabel
;
xaxis display=(nolabel);
run;
ods html close;
图片
我需要帮助创建一个条形图,将条形图配对在一起(按两个级别的组),四个时间段。这是我的 table 数据的样子,按 'Group':
排序我已经想出如何绘制两组的均值,但一次只绘制一个时间段:
proc sgplot data=Testdata;
vbar Group /
response=Baseline
stat=mean
GROUPDISPLAY = CLUSTER;
run;
这让我明白了:
不过,我想"smoosh"把这两个柱子放在一起,让它们相互接触,然后添加方法,对于每个级别的组,对于其他三个时间段,都在一个情节。我试过将其他时间段添加到 'response=' 行(带逗号和不带逗号),但这不起作用。
请帮忙!
(我知道这有点贪心,但如果有人能告诉我如何根据组级别更改条形颜色,那就太好了)
TIA 寻求帮助。
您需要转置数据,以便拥有列 id
、group
、period
、result
。
VBAR 语句将从
VBAR GROUP
至VBAR PERIOD
并且您可以使用 VBAR
功能
group = GROUP
datalabel = result
statlabel
示例:
data have;
call streaminit(123);
do group = 'A' , 'B';
do _n_ = 1 to ifn(group='A',6,11);
id + 1;
baseline = ifn(group='A', 2125, 4400) + rand('integer', 400) - 200;
period1 = ifn(group='A', 2425, 4100) + rand('integer', 600) - 300;
period2 = ifn(group='A', 1800, 3600) + rand('integer', 500) - 250;
period3 = ifn(group='A', 1600, 2800) + rand('integer', 500) - 250;
output;
end;
end;
label
baseline = 'Basline'
period1 = '14 Day Average'
period2 = '30 Day Average'
period3 = '60 Day Average'
;
run;
proc transpose data=have
out=plotdata (
rename=(
_name_ = period
_label_ = period_label
col1 = result
))
;
by id group notsorted;
var baseline period1-period3;
label period = ' ';
label period_label = ' ';
run;
ods html file='plot.html' style=plateau;
proc sgplot data=plotdata;
vbar period_label /
response = result
stat = mean
groupdisplay = cluster
group = group
datalabel = result statlabel
;
xaxis display=(nolabel);
run;
ods html close;
图片