美文网首页SAS画图
182:MEAN±SD图(一)

182:MEAN±SD图(一)

作者: SASPRO的打工人生活 | 来源:发表于2022-12-31 21:40 被阅读0次

    MEAN±SD图算是我们工作中经常遇到的图之一,一般用来展示血药浓度变化。其实MEAN±SD图主要是折线图(series plot)和散点图(scatter plot)两者的结合。正如标题所示,MEAN±SD图需要我们算出mean和SD,然后上限就是MEAN+SD,下限就是MEAN-SD,如下图所示:

    生成所需数据,分两组,数据不太好,按理说血药浓度数据应该是随着时间爬升然后下降(所以我在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;

    输出如下,丑了点

    先简单介绍一下里面的参数:

    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

    groupdisplay=CLUSTER groupdisplay=OVERLAY

    目前猜测是groupdisplay=CLUSTER能等距展示数据(如果有了解的读者欢迎指教),但是注意这样的yerrorlower/yerroruppersh展示是有问题的。

    先讲这么些吧,今天不是很想写文章的。

    相关文章

      网友评论

        本文标题:182:MEAN±SD图(一)

        本文链接:https://www.haomeiwen.com/subject/ozuqcdtx.html