182:MEAN±SD图(一)
MEAN±SD图算是我们工作中经常遇到的图之一,一般用来展示血药浓度变化。其实MEAN±SD图主要是折线图(series plot)和散点图(scatter plot)两者的结合。正如标题所示,MEAN±SD图需要我们算出mean和SD,然后上限就是MEAN+SD,下限就是MEAN-SD,如下图所示:
![](https://img.haomeiwen.com/i1998906/dee5ea5a80e96d2c.png)
生成所需数据,分两组,数据不太好,按理说血药浓度数据应该是随着时间爬升然后下降(所以我在atptn=0.5,atptn=72强制处理了一下),凑活着用吧。
data series;
retain _seed_ 0;
do subjid="S001","S002","S003","S004","S005","S006","S007","S008","S009","S010";
do atptn=0.5,1, 1.5,2,4,6,12,24,48,72;
/* aval=int(ranuni(0) * 4100 + 10);*/
aval=int(rand('NORMAL',50,10));
/* aval=7+100*rannor(_seed_);*/
output;
end;
end;
run;
data series2;
set series;
if subjid in ("S001","S002","S003","S004","S005") then do;trta="A组";trtan=1;end;
else if subjid in ("S006","S007","S008","S009","S010") then do;trta="B组";trtan=2;end;
if atptn=0.5 then aval=5;
if atptn=72 then aval=8;
proc sort;by trta atptn;
run;
proc means data=series2 noprint;
by trta atptn;
var aval;
output out=meanplot(drop=_type_ _freq_) mean=mean std=std;
run;
data meanplot2;
set meanplot;
if nmiss(mean, std)=0 then do;
upmeansd=mean+std;
lowmeansd=mean-std;
end;
run;
title 'Mean±SD by ATPTN and Treatment';
proc sgplot data=meanplot2 /* (where=(trta="A组")) sganno=annoOuter pad=(bottom=14%)*/;
scatter x=atptn y=mean / yerrorupper=upmeansd yerrorlower=lowmeansd group=trta groupdisplay=OVERLAY clusterwidth=0.5
markerattrs=(size=7 symbol=circlefilled);
series x=atptn y=mean / group=trta groupdisplay=OVERLAY clusterwidth=0.5 lineattrs=(pattern=solid);
run;
输出如下,丑了点
![](https://img.haomeiwen.com/i1998906/abf3969d25f17a90.png)
先简单介绍一下里面的参数:
1:YERRORLOWER/YERRORUPPER的作用是绘制散点到下限/上限之间的线条,
2:GROUP=作用是为 “=”后面你指定的变量创建不一样的标志,如图中红色和蓝色的点。其实就是区分不同的组别(在这个例子中)
3:groupdisplay 这个选项的值只有两个:OVERLAY | CLUSTER ,默认的选项是OVERLAY,所以上面的代码有误(看数据然后发现Y轴的坐标有问题),应该用OVERLAY,而不是CLUSTER。说实话,我不是很清楚这两个区别,SASHELP的解释也不是明白:
groupdisplay:specifies how marker groups are positioned for the coordinate pairs.
OVERLAY
draws markers for a given group value at the exact coordinate. Depending on the data, markers at a given coordinate might overlap.
CLUSTER
draws markers for a given group value adjacent to each other.
用SASHELP里面的例子能看出区别
groupdisplay=CLUSTER
![](https://img.haomeiwen.com/i1998906/503d5124936eea39.png)
![](https://img.haomeiwen.com/i1998906/e1c0aef275202686.png)
目前猜测是groupdisplay=CLUSTER能等距展示数据(如果有了解的读者欢迎指教),但是注意这样的yerrorlower/yerroruppersh展示是有问题的。
先讲这么些吧,今天不是很想写文章的。