SAS-临床试验程序绘图合集(一)

2020-05-22 11:06:33 浏览数 (1)

年前,小编打算写一套SAS绘图的宏程序,于是在朋友圈发了个“调查问卷”,询问了大家临床编程中常遇见的图形。经过漫长的积累与等待(究其原因还是太懒了),本文孕育与诞生了,小编将在本文及后续推文中汇总并分享一些常见的SAS绘图程序及技巧。

图形类型

折线图

散点图

条形图

箱体图

蜘蛛图

泳道图

瀑布图

生存图

小编最初的想法是将这些图形的绘制写成宏,然后分享/出售

,日前,看到了《药物临床试验数据递交指导原则(征求意见稿).doc》正文114行的“尤其应避免大型宏程序的嵌套”,所以写宏的计划暂时夭折了。所以呀,今天要分享的内容不含大型宏程序。

折线图

首先是最基础的折线图,折线图的应有也是十分广泛的,譬如:药时曲线等均是临床试验中折线图绘制的典型例子。关于这部分小编也是在历史文章写过的,如有兴趣可在本文阅读完后,在此点击进行阅读(药时(一)、药时(二)),当然这是几年前的文章了,文中不乏有漏洞或程序冗杂之处。如有需要小编后来多次更新的最新相关程序,可私下联系。

SGPLOT

GTL

代码语言:javascript复制

proc format ;
    value GROUPfmt 1='高剂量组' 2='中剂量组' 3='低剂量组' 4='安慰剂组';
run;


data adrs;
  do i=1 to 20;
    *模拟受试者;
    SUBJID=put(i,z3.);
     *模拟组别;
     ARMCD=mod(i,4) 1;
     ARM=put(ARMCD,GROUPfmt.);
     do DY=1 to 4;  
       aval=int(ranuni(1)*20)*int(ranuni(0)*10);
      output;
      end;
    end;
run;


proc sort data=adrs  out=adrs ;by   ARMCD  ARM DY  ; ;quit;

proc means data = adrs noprint alpha=0.05;
  by  ARMCD  ARM DY;
  var aval;                
  output out=_runtemp_s1   n = n  mean = mean q1=q1 q3=q3 std=std median=median  nmiss=nmiss min=min max=max lclm=lclm_ uclm=uclm_;
run;



ods rtf file="&runsetup.折线图测试结果.rtf" style=threelines_setup startpage=yes;
ODS graphics on /width=18cm height=10cm noborder ;
ods  rtf nogtitle nogfootnote;/*避免title footnote出现在title中*/
title1 j= l "官网:https://www.sas-pharma.com" j= r "作者:Setup";
title2 j= l"微信号:xiaocgn" j= r"日期:&date1.";
footnote j= l "折线图(V1.0)" j= r "欢迎关注公众号";

data Setup;
    length value FillColor LineColor MARKERCOLOR MARKERSYMBOL  LINEPATTERN $30;
    Id='Setup'; Value="1"; FillColor='Red'; LineColor='Red';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Red'; output;
    Id='Setup'; Value="2"; FillColor='blue'; LineColor='blue'; LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='blue';  output;
    Id='Setup'; Value="3"; FillColor='Green'; LineColor='Green';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Green';  output;
    Id='Setup'; Value="4"; FillColor='Orange'; LineColor='Orange';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Orange';  output;
run;

*图中画标题:legenditem;


 proc sgplot data=_runtemp_s1  dattrmap=Setup;
        series  x=DY y=mean/ group=ARMCD  name='L2' lineattrs=(thickness=1)  markers ATTRID=Setup ;
        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      /*设置:设置图例*/
        keylegend 'S1' 'S2' 'S3' 'S4'/ title=""  location= inside position=TOPRIGHT  noborder  across=1
                titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                valueattrs=(color=black  family="Times New Roman/宋体" size=10)  sortorder=REVERSEAUTO ;

         legenditem type=TEXT   name="S5" /TEXT="Figure xxx.xxx.x.x Series Plot  " TEXTATTRS=(color=black  family="Times New Roman/宋体" size=10);
        keylegend  'S5'  / title=" "  location= outside position=top  noborder  down=1
                              titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                              valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;
;
      /*设置:坐标*/
        xaxis label="X轴"    values=( 1 2 3 4) valuesdisplay=("基线" "治疗第2周" "治疗第4周" "随访期")
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10)  fitpolicy=none valuesrotate=diagonal2 ;
                    *刻度值旋转:ROTATE 旋转反向:VALUESROTATE:diagonal | diagonal2 | vertical ;


        yaxis label="Y轴"   values=(0 to 120 by 20)
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10) fitpolicy=none;
run;


ods graphics /outputfmt=JPEG;



proc template;
  define statgraph setup;
    begingraph/ border=false backgroundcolor=white;
          entryfootnote  halign=center  "Figure xxx.xxx.x.x Series Plot   "/ textattrs=(color=black  family="times new roman/宋体" size=7);
      /*   entrytitle  halign=left  "&&ffootnote&ms." / textattrs=(color=black  family="times new roman/宋体" size=7);*/
        discreteattrmap name="temp1" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=red  symbol=circlefilled  ) lineattrs=GraphData1(color=red pattern=solid ) fillattrs=GraphData1(color=red );
          value "2" /markerattrs=GraphData1(color=blue  symbol=circlefilled  ) lineattrs=GraphData1(color=blue pattern=solid) fillattrs=GraphData1(color=blue  );
          value "3" /markerattrs=GraphData1(color=green  symbol=circlefilled) lineattrs=GraphData1(color=green pattern=solid) fillattrs=GraphData1(color=green );
          value "4" /markerattrs=GraphData1(color=Orange  symbol=circlefilled) lineattrs=GraphData1(color=Orange pattern=solid) fillattrs=GraphData1(color=Orange );
        enddiscreteattrmap;

        discreteattrvar attrvar=markers1 var=ARMCD  attrmap="temp1";
        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      layout overlay //* walldisplay=none*/ cycleattrs=true  
      yaxisopts=(gridDisplay=off LABEL="Y轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      LABELSPLITCHAR="$" LABELFITPOLICY=SPLITALWAYS tickvalueattrs=( size=7pt  family="Times New Roman/宋体") 
      linearopts=(tickvaluelist=(0 20 40 60 80 100 120)  tickvaluefitpolicy=none  tickvaluepriority=true ))
      xaxisopts=(display=(ticks tickvalues line label) gridDisplay=off label="X轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      tickvalueattrs=( size=7pt  family="Times New Roman/宋体") linearopts=(tickvaluelist=( 1 2 3 4 ) tickdisplaylist=("基线" "治疗第2周" "治疗第4周" "随访期")  tickvaluefitpolicy=none  tickvaluepriority=true ))
;
      seriesplot x=DY y=mean/  group=markers1  name="series1" lineattrs=(thickness=1) display=(markers)
      markercolorgroup=markers1 markerattrs=(symbol=circlefilled)
      linecolorgroup=markers1  lineattrs=(pattern=solid) ;
  
          discretelegend  "S1" "S2" "S3"  'S4'/  border=false  location=inside halign=right valign=top across=1
                title="" titleattrs=GraphValueText(color=black  family="Times New Roman/宋体" size=10pt);
    endlayout;
  endgraph;
  end;
run;


proc sgrender data=_runtemp_s1 template=setup;
run; 

;
;
ods rtf close;

代码如上,分别采取PROC SGPLOTGTL俩种绘图方式。数据均是模拟随机产生的。关于代码中的语法,此处不做介绍,可私下与小编交流或查看SAS帮助文档。

代码下载链接:

https://www.sas-pharma.com/code/seriesplot.txt

散点图

散点图也是基础图形之一,在临床统计绘图编程中,散点图常与其他图形一起组成复合图形,譬如:泳道图上的标记符等,相关的例子很多。

SGPLOT

GTL

代码语言:javascript复制
proc format ;
    value GROUPfmt 1='高剂量组' 2='中剂量组' 3='低剂量组' 4='安慰剂组';
run;


data adrs;
  do i=1 to 20;
    *模拟受试者;
    SUBJID=put(i,z3.);
     *模拟组别;
     ARMCD=mod(i,4) 1;
     ARM=put(ARMCD,GROUPfmt.);
     do DY=1 to 4;  
       aval=int(ranuni(1)*20)*int(ranuni(0)*10);
      output;
      end;
    end;
run;


proc sort data=adrs  out=adrs ;by   ARMCD  ARM DY  ; ;quit;

proc means data = adrs noprint alpha=0.05;
  by  ARMCD  ARM DY;
  var aval;                
  output out=_runtemp_s1   n = n  mean = mean q1=q1 q3=q3 std=std median=median  nmiss=nmiss min=min max=max lclm=lclm_ uclm=uclm_;
run;

data _runtemp_s1;
  set _runtemp_s1;
  upperstd=mean std;
  lowerstd=mean-std;
run;


ods rtf file="&runsetup.散点图测试结果.rtf" style=threelines_setup startpage=yes;
ODS graphics on /width=18cm height=10cm noborder ;
ods  rtf nogtitle nogfootnote;/*避免title footnote出现在title中*/
title1 j= l "官网:https://www.sas-pharma.com" j= r "作者:Setup";
title2 j= l"微信号:xiaocgn" j= r"日期:&date1.";
footnote j= l "散点图(V1.0)" j= r "欢迎关注公众号";

data Setup;
    length value FillColor LineColor MARKERCOLOR MARKERSYMBOL  LINEPATTERN $30;
    Id='Setup'; Value="1"; FillColor='Red'; LineColor='Red';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='triangleright';  MARKERCOLOR='Red'; output;
    Id='Setup'; Value="2"; FillColor='blue'; LineColor='blue'; LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='triangle';  MARKERCOLOR='blue';  output;
    Id='Setup'; Value="3"; FillColor='Green'; LineColor='Green';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='triangledown';  MARKERCOLOR='Green';  output;
    Id='Setup'; Value="4"; FillColor='Orange'; LineColor='Orange';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='triangleleft';  MARKERCOLOR='Orange';  output;
run;
*图中画标题:legenditem;


 proc sgplot data=_runtemp_s1  dattrmap=Setup;
         scatter  x=DY y=mean/ group=ARMCD  yerrorupper =upperstd  yerrorlower=lowerstd  ATTRID=Setup;

        legenditem type=marker   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=triangleright) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=triangle) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=triangledown) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=triangleleft) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      /*设置:设置图例*/
        keylegend 'S1' 'S2' 'S3' 'S4'/ title=""  location= inside position=TOPRIGHT  noborder  across=1
                titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                valueattrs=(color=black  family="Times New Roman/宋体" size=10)  sortorder=REVERSEAUTO ;

         legenditem type=TEXT   name="S5" /TEXT="Figure xxx.xxx.x.x scatter Plot  " TEXTATTRS=(color=black  family="Times New Roman/宋体" size=10);
        keylegend  'S5'  / title=" "  location= outside position=top  noborder  down=1
                              titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                              valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;
;
      /*设置:坐标*/
        xaxis label="X轴"    values=( 1 2 3 4) valuesdisplay=("基线" "治疗第2周" "治疗第4周" "随访期")
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10)  fitpolicy=none valuesrotate=diagonal2 ;
                    *刻度值旋转:ROTATE 旋转反向:VALUESROTATE:diagonal | diagonal2 | vertical ;


        yaxis label="Y轴"   values=(-40 to 140 by 20)
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10) fitpolicy=none;
run;


ods graphics /outputfmt=JPEG;



proc template;
  define statgraph setup;
    begingraph/ border=false backgroundcolor=white;
          entryfootnote  halign=center  "Figure xxx.xxx.x.x scatter Plot   "/ textattrs=(color=black  family="times new roman/宋体" size=7);
      /*   entrytitle  halign=left  "&&ffootnote&ms." / textattrs=(color=black  family="times new roman/宋体" size=7);*/
        discreteattrmap name="temp1" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=red  symbol=triangleright  ) lineattrs=GraphData1(color=red pattern=solid ) fillattrs=GraphData1(color=red );
          value "2" /markerattrs=GraphData1(color=blue  symbol=triangle  ) lineattrs=GraphData1(color=blue pattern=solid) fillattrs=GraphData1(color=blue  );
          value "3" /markerattrs=GraphData1(color=green  symbol=triangledown) lineattrs=GraphData1(color=green pattern=solid) fillattrs=GraphData1(color=green );
          value "4" /markerattrs=GraphData1(color=Orange  symbol=triangleleft) lineattrs=GraphData1(color=Orange pattern=solid) fillattrs=GraphData1(color=Orange );
        enddiscreteattrmap;

        discreteattrvar attrvar=markers1 var=ARMCD  attrmap="temp1";
        legenditem type=marker   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=triangleright) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=triangle) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=triangledown) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=marker   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=triangleleft) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      layout overlay //* walldisplay=none*/ cycleattrs=true  
      yaxisopts=(gridDisplay=off LABEL="Y轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      LABELSPLITCHAR="$" LABELFITPOLICY=SPLITALWAYS tickvalueattrs=( size=7pt  family="Times New Roman/宋体") 
      linearopts=(tickvaluelist=(-40 -20 0 20 40 60 80 100 120 140)  tickvaluefitpolicy=none  tickvaluepriority=true ))
      xaxisopts=(display=(ticks tickvalues line label) gridDisplay=off label="X轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      tickvalueattrs=( size=7pt  family="Times New Roman/宋体") linearopts=(tickvaluelist=( 1 2 3 4 ) tickdisplaylist=("基线" "治疗第2周" "治疗第4周" "随访期")  tickvaluefitpolicy=none  tickvaluepriority=true ))
;
      scatterplot x=DY y=mean/  group=markers1 yerrorupper =upperstd  yerrorlower=lowerstd  ;
  
          discretelegend  "S1" "S2" "S3"  'S4'/  border=false  location=inside halign=right valign=top across=1
                title="" titleattrs=GraphValueText(color=black  family="Times New Roman/宋体" size=10pt);
    endlayout;
  endgraph;
  end;
run;


proc sgrender data=_runtemp_s1 template=setup;
run; 

;
;
ods rtf close;

代码如上,分别采取PROC SGPLOTGTL俩种绘图方式。数据均是模拟随机产生的。关于代码中的语法,此处不做介绍,可私下与小编交流或查看SAS帮助文档。

代码下载链接:

https://www.sas-pharma.com/code/scatterplot.txt

条形图

关于条形小编以前也发过相关推送,譬如:譬如堆积条形图的绘制,如有兴趣可在本文阅读完后,在此点击进行阅读(堆积条形图的绘制),条形图也是基础图形之一,可与其他图形组合使用,生成瀑布图、泳道图等等。

SGPLOT

GTL

代码语言:javascript复制


proc format ;
    value GROUPfmt 1='高剂量组' 2='中剂量组' 3='低剂量组' 4='安慰剂组';
run;



data adrs;
  do i=1 to 20;
    *模拟受试者;
    SUBJID=put(i,z3.);
     *模拟组别;
     ARMCD=mod(i,4) 1;
     ARM=put(ARMCD,GROUPfmt.);
     *模拟研究时长;
     DY01=ranuni(0)*20;
     output;
    end;
  drop I;
run;



data _null_;
  call symput("date",left(put("&sysdate"d,yymmdd10.)));
  call symput("date1",left(compress(put("&sysdate"d,yymmdd10.),"-"," ")));
run;

ods rtf file="&runsetup.条形测试结果.rtf" style=threelines_setup startpage=no;
ODS graphics on /width=18cm height=10cm noborder ;
ods  rtf nogtitle nogfootnote;/*避免title footnote出现在title中*/

title1 j= l "官网:https://www.sas-pharma.com" j= r "作者:Setup";
title2 j= l"微信号:xiaocgn" j= r"日期:&date1.";
 footnote j= l "条形图(V1.0)" j= r "欢迎关注公众号";
*  DATTRMAP 数据集变量介绍
  FILLCOLOR:填充颜色
  FILLTRANSPARENCY:透明度
  ID :指定标识 与plot语句中的 attrid=参数对应
  LINECOLOR :线条颜色
  LINEPATTERN:线条类型
  LINETHICKNESS:线条粗细
  MARKERCOLOR:标记符号颜色
  MARKERSIZE:标记符号大小
  MARKERSYMBOL:标记符号名称
  MARKERTRANSPARENCY:标记符号透明度
  VALUE:指定对应group组别的值;



data Setup;
    length value FillColor LineColor $30;
    Id='Setup'; Value="1"; FillColor='Red'; LineColor='Black'; output;
    Id='Setup'; Value="2"; FillColor='blue'; LineColor='Black'; output;
    Id='Setup'; Value="3"; FillColor='Green'; LineColor='Black'; output;
    Id='Setup'; Value="4"; FillColor='Orange'; LineColor='Black'; output;
run;

*图中画标题:legenditem;


proc sort data=adrs  out= adrs sortseq=linguistic(numeric_collation=on);by subjid ;quit;
 proc sgplot data=adrs  noborder  dattrmap=Setup;
          hbarparm    category=subjid response=DY01  / group=ARMCD GROUPORDER=DATA    name='L2' nooutline transparency=0.3  attrid=Setup ;



        legenditem type=FILL   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=red)    FILLATTRS=(color=red transparency = 0.3)  label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=FILL   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=blue)    FILLATTRS=(color=blue transparency = 0.3)  label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=FILL   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=green)    FILLATTRS=(color=green transparency = 0.3)  label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=FILL   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=Orange)    FILLATTRS=(color=Orange transparency = 0.3)  label="安慰剂组"   outlineattrs=(color=white);
/*设置:设置图例*/
      keylegend  'S1' 'S2' 'S3' 'S4'   / title=""  location= outside position=BOTTOM  noborder  down=4
                        titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                        valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;

        legenditem type=TEXT   name="S10" /TEXT="Figure xxx.xxx.x.x barchart Plot  " TEXTATTRS=(color=black  family="Times New Roman/宋体" size=10);

         /*在图中绘制标题:*/
        keylegend  'S10'  / title=" "  location= outside position=top  noborder  down=1
                              titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                              valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;


/*设置:坐标*/
  xaxis label="Months since first dose of study drug"    values=(0  to 26 by 2)  
              valueattrs=(color=black  family="times new roman/宋体" size=10)
              labelattrs=(color=black  family="Times New Roman/宋体" size=10)  fitpolicy=none valuesrotate=diagonal2 ;
              *刻度值旋转:ROTATE 旋转反向:VALUESROTATE:diagonal | diagonal2 | vertical ;


  yaxis display=(noticks noline nolabel) reverse
              valueattrs=(color=black  family="times new roman/宋体" size=10)
              labelattrs=(color=black  family="Times New Roman/宋体" size=10) fitpolicy=none;
run;
proc template;
  define statgraph setup;
  begingraph / backgroundcolor=CXFFFFFF dataskin=none;
  entrytitle halign=center "Figure xxx.xxx.x.x barchart Plot" /textattrs=(color=black  family="Times New Roman/宋体" size=9);
        discreteattrmap name="temp1" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=red  symbol=circlefilled  ) lineattrs=GraphData1(color=red pattern=solid ) fillattrs=GraphData1(color=red );
          value "2" /markerattrs=GraphData1(color=blue  symbol=circlefilled  ) lineattrs=GraphData1(color=blue pattern=solid) fillattrs=GraphData1(color=blue  );
          value "3" /markerattrs=GraphData1(color=green  symbol=circlefilled) lineattrs=GraphData1(color=green pattern=solid) fillattrs=GraphData1(color=green );
          value "4" /markerattrs=GraphData1(color=Orange  symbol=circlefilled) lineattrs=GraphData1(color=Orange pattern=solid) fillattrs=GraphData1(color=Orange );
        enddiscreteattrmap;

        discreteattrvar attrvar=markers1 var=ARMCD  attrmap="temp1";
        legenditem type=FILL   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=red)    FILLATTRS=(color=red )  label="高剂量组"   outlineattrs=(color=white); 
        legenditem type=FILL   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=blue)    FILLATTRS=(color=blue )  label="中剂量组"   outlineattrs=(color=white); 
        legenditem type=FILL   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=green)    FILLATTRS=(color=green )  label="低剂量组"   outlineattrs=(color=white); 
        legenditem type=FILL   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) 
        lineattrs=(color=Orange)    FILLATTRS=(color=Orange )  label="安慰剂组"   outlineattrs=(color=white); 


  

        layout overlay / wallcolor=white walldisplay=none 
            xaxisopts=(  display=(  TICKS  TICKVALUES line LABEL )  griddisplay=off label="Months since first dose of study drug"
            linearopts=( minorgrid=off minorticks=off tickvaluepriority=TRUE tickvalueformat=BEST6. tickvaluelist=(0 2 4 6 8 10 12 14 16 18 20 22 24 26) ))
            yaxisopts=(  display=( TICKVALUES)   discreteopts=( tickvaluefitpolicy=none));
                barchart category=SUBJID response=DY01 / group=markers1 name='L1' datatransparency=0.3 
            display=(FILL) stat=MEAN barlabel=false orient=horizontal barwidth=0.4 groupdisplay=Stack clusterwidth=0.1;


                discretelegend  'S1' 'S2' 'S3' 'S4'   / 
            autoalign=(topright)  opaque=TRUE border=false displayclipped=true across=4  order=columnmajor outerpad=auto 
              TITLEBORDER=FALSE
            location=inside;
        endlayout;
  endgraph;
  end;
run;



 proc sgrender data=adrs template=setup;
run; 

;

ods rtf close;

代码如上,分别采取PROC SGPLOT GTL俩种绘图方式。数据均是模拟随机产生的。关于代码中的语法,此处不做介绍,可私下与小编交流或查看SAS帮助文档。

代码下载链接:

https://www.sas-pharma.com/code/barchart.txt

箱体图

箱式图是临床统计编程中常见图形之一,也是很灵活多变的,譬如:描点、连线等等。

SGPLOT

GTL

代码语言:javascript复制


proc format ;
    value GROUPfmt 1='高剂量组' 2='中剂量组' 3='低剂量组' 4='安慰剂组';
    value vist 1='基线' 2='治疗第2周' 3='治疗第4周' 4='随访期';
run;


data adrs;
  do i=1 to 20;
    *模拟受试者;
    SUBJID=put(i,z3.);
     *模拟组别;
     ARMCD=mod(i,4) 1;
     ARM=put(ARMCD,GROUPfmt.);
     do DY=1 to 4;  
       aval=int(ranuni(1)*20)*int(ranuni(0)*10);
      output;
      end;
    end;
run;


proc sort data=adrs  out=adrs ;by   ARMCD  ARM DY  ; ;quit;
/**/
/*proc means data = adrs noprint alpha=0.05;*/
/*  by  ARMCD  ARM DY;*/
/*  var aval;                */
/*  output out=_runtemp_s1   n = n  mean = mean q1=q1 q3=q3 std=std median=median  nmiss=nmiss min=min max=max lclm=lclm_ uclm=uclm_;*/
/*run;*/
/**/
/*data _runtemp_s1;*/
/*  set _runtemp_s1;*/
/*  upperstd=mean std;*/
/*  lowerstd=mean-std;*/
/*run;*/


ods rtf file="&runsetup.箱式图测试结果.rtf" style=threelines_setup startpage=yes;
ODS graphics on /width=18cm height=10cm noborder ;
ods  rtf nogtitle nogfootnote;/*避免title footnote出现在title中*/
title1 j= l "官网:https://www.sas-pharma.com" j= r "作者:Setup";
title2 j= l"微信号:xiaocgn" j= r"日期:&date1.";
footnote j= l "箱式图(V1.0)" j= r "欢迎关注公众号";

data Setup;
    length value FillColor LineColor MARKERCOLOR MARKERSYMBOL  LINEPATTERN $30;
    Id='Setup'; Value="1"; FillColor='Red'; LineColor='Red';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Red'; output;
    Id='Setup'; Value="2"; FillColor='blue'; LineColor='blue'; LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='blue';  output;
    Id='Setup'; Value="3"; FillColor='Green'; LineColor='Green';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Green';  output;
    Id='Setup'; Value="4"; FillColor='Orange'; LineColor='Orange';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Orange';  output;
run;
*图中画标题:legenditem;



 proc sgplot data=adrs  dattrmap=Setup;
        vbox  AVAL/ category=DY  name='L2' boxwidth=0.4 nofill group=ARMCD ATTRID=Setup
/*        datalabel=AVAL  datalabelattrs=(family="Times New Roman/宋体" size=6)  */
        connect=mean  connectattrs=( Pattern=solid Thickness=1); ;

        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      /*设置:设置图例*/
        keylegend 'S1' 'S2' 'S3' 'S4'/ title=""  location= inside position=TOPRIGHT  noborder  across=1
                titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                valueattrs=(color=black  family="Times New Roman/宋体" size=10)  sortorder=REVERSEAUTO ;

         legenditem type=TEXT   name="S5" /TEXT="Figure xxx.xxx.x.x vbox Plot  " TEXTATTRS=(color=black  family="Times New Roman/宋体" size=10);
        keylegend  'S5'  / title=" "  location= outside position=top  noborder  down=1
                              titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                              valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;
;
      /*设置:坐标*/
        xaxis label="X轴"    values=( 1 2 3 4) valuesdisplay=("基线" "治疗第2周" "治疗第4周" "随访期")
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10)  fitpolicy=none valuesrotate=diagonal2 ;
                    *刻度值旋转:ROTATE 旋转反向:VALUESROTATE:diagonal | diagonal2 | vertical ;


        yaxis label="Y轴"   values=(-20 to 180 by 20)
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10) fitpolicy=none;
run;


ods graphics /outputfmt=JPEG;



proc template;
  define statgraph setup;
    begingraph/ border=false backgroundcolor=white;
          entryfootnote  halign=center  "Figure xxx.xxx.x.x boxplot Plot   "/ textattrs=(color=black  family="times new roman/宋体" size=7);
      /*   entrytitle  halign=left  "&&ffootnote&ms." / textattrs=(color=black  family="times new roman/宋体" size=7);*/
        discreteattrmap name="temp1" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=red  symbol=circlefilled  ) lineattrs=GraphData1(color=red pattern=solid ) fillattrs=GraphData1(color=red );
          value "2" /markerattrs=GraphData1(color=blue  symbol=circlefilled  ) lineattrs=GraphData1(color=blue pattern=solid) fillattrs=GraphData1(color=blue  );
          value "3" /markerattrs=GraphData1(color=green  symbol=circlefilled) lineattrs=GraphData1(color=green pattern=solid) fillattrs=GraphData1(color=green );
          value "4" /markerattrs=GraphData1(color=Orange  symbol=circlefilled) lineattrs=GraphData1(color=Orange pattern=solid) fillattrs=GraphData1(color=Orange );
        enddiscreteattrmap;

        discreteattrvar attrvar=markers1 var=ARMCD  attrmap="temp1";
        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      layout overlay //* walldisplay=none*/ cycleattrs=true  
      yaxisopts=(gridDisplay=off LABEL="Y轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      LABELSPLITCHAR="$" LABELFITPOLICY=SPLITALWAYS tickvalueattrs=( size=7pt  family="Times New Roman/宋体") 
      linearopts=(tickvaluelist=(-20 0 20 40 60 80 100 120 140 160 180)  tickvaluefitpolicy=none  tickvaluepriority=true ))
      xaxisopts=(display=(ticks tickvalues line label) gridDisplay=off label="X轴"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      tickvalueattrs=( size=7pt  family="Times New Roman/宋体") linearopts=(tickvaluelist=( 1 2 3 4 )  tickdisplaylist=("基线" "治疗第2周" "治疗第4周" "随访期")  tickvaluefitpolicy=none  tickvaluepriority=true ))
;  
        boxplot x=DY y=AVAL/ GROUP=markers1 groupdisplay=Cluster
      connect=mean  connectattrs=( Pattern=solid Thickness=1) 
      display=( mean outliers caps  connect ) ;


          discretelegend  "S1" "S2" "S3"  'S4'/  border=false  location=inside halign=right valign=top across=1
                title="" titleattrs=GraphValueText(color=black  family="Times New Roman/宋体" size=10pt);
    endlayout;
  endgraph;
  end;
run;


proc sgrender data=adrs template=setup;
run; 

;
;
ods rtf close;

代码如上,分别采取PROC SGPLOTGTL俩种绘图方式。数据均是模拟随机产生的。关于代码中的语法,此处不做介绍,可私下与小编交流或查看SAS帮助文档。

代码下载链接:

https://www.sas-pharma.com/code/boxplot.txt

蜘蛛图

近年来,肿瘤类项目很热门,随之与肿瘤相关的图形也是常常在编程中语句,譬如:蜘蛛图、瀑布图、泳道图与生存图等,首先来看看蜘蛛图的绘制,通常用来描述靶病灶随时间变化而变化的率。

SGPLOT

GTL

代码语言:javascript复制


proc format ;
    value GROUPfmt 1='高剂量组' 2='中剂量组' 3='低剂量组' 4='安慰剂组';
run;


*蜘蛛图
各时点肿瘤大小变化率
衍生DY  PCHG;


data adrs;
  do i=1 to 20;
    *模拟受试者;
    SUBJID=put(i,z3.);
     *模拟组别;
     ARMCD=mod(i,4) 1;
     ARM=put(ARMCD,GROUPfmt.);
     *模拟研究时长;
     do DY=0 to int(ranuni(1)*13);
       *模拟变化率;
  
       pchg=ranuni(int(ranuni(1)*13))*ifn(ranuni(0)<0.5,1,-1)*100;
          if DY=0 then pchg=0;
      output;
      end;
     end;
  drop I;
run;



data _null_;
  call symput("date",left(put("&sysdate"d,yymmdd10.)));
  call symput("date1",left(compress(put("&sysdate"d,yymmdd10.),"-"," ")));
run;

*  DATTRMAP 数据集变量介绍
  FILLCOLOR:填充颜色
  FILLTRANSPARENCY: 透明度
  ID :指定标识 与plot语句中的 attrid=参数对应
  LINECOLOR :线条颜色
  LINEPATTERN:线条类型
  LINETHICKNESS:线条粗细
  MARKERCOLOR:标记符号颜色
  MARKERSIZE:标记符号大小
  MARKERSYMBOL:标记符号名称
  MARKERTRANSPARENCY:标记符号透明度
  VALUE:指定对应group组别的值;




ods rtf file="&runsetup.蜘蛛图测试结果.rtf" style=threelines_setup startpage=no;
ODS graphics on /width=18cm height=10cm noborder ;
ods  rtf nogtitle nogfootnote;/*避免title footnote出现在title中*/

title1 j= l "官网:https://www.sas-pharma.com" j= r "作者:Setup";
title2 j= l"微信号:xiaocgn" j= r"日期:&date1.";
 footnote j= l "蜘蛛图(V1.0)" j= r "欢迎关注公众号";

data Setup;
    length value FillColor LineColor MARKERCOLOR MARKERSYMBOL  LINEPATTERN $30;
    Id='Setup'; Value="1"; FillColor='Red'; LineColor='Red';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Red'; output;
    Id='Setup'; Value="2"; FillColor='blue'; LineColor='blue'; LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='blue';  output;
    Id='Setup'; Value="3"; FillColor='Green'; LineColor='Green';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Green';  output;
    Id='Setup'; Value="4"; FillColor='Orange'; LineColor='Orange';LINEPATTERN='solid';LINETHICKNESS=1;MARKERSYMBOL='circlefilled';  MARKERCOLOR='Orange';  output;
run;

*图中画标题:legenditem;


 proc sgplot data=adrs  dattrmap=Setup;

        series  x=DY y=PCHG/ group=SUBJID  name='L2' lineattrs=(thickness=1)  grouplc=ARMCD  GROUPLP=ARMCD GROUPMS=ARMCD groupmc=ARMCD  
        markers LCATTRID=Setup MCATTRID=Setup  LPATTRID=Setup MSATTRID=Setup ;
        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      /*设置:设置图例*/
        keylegend 'S1' 'S2' 'S3' 'S4'/ title=""  location= inside position=TOPRIGHT  noborder  across=1
                titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                valueattrs=(color=black  family="Times New Roman/宋体" size=10)  sortorder=REVERSEAUTO ;

         legenditem type=TEXT   name="S5" /TEXT="Figure xxx.xxx.x.x Spider Plot  " TEXTATTRS=(color=black  family="Times New Roman/宋体" size=10);
        keylegend  'S5'  / title=" "  location= outside position=top  noborder  down=1
                              titleattrs=(color=black  family="Times New Roman/宋体" size=10)
                              valueattrs=(color=black  family="Times New Roman/宋体" size=10)   ;
;
      /*设置:坐标*/
        xaxis label="Months since first dose of study drug"    values=(0 1 2 3 4 5 6 7 8 9 10 11 12) 
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10)  fitpolicy=none valuesrotate=diagonal2 ;
                    *刻度值旋转:ROTATE 旋转反向:VALUESROTATE:diagonal | diagonal2 | vertical ;


        yaxis label="Precent Change from Baseline"   values=(-100 to 100 by 50)
                    valueattrs=(color=black  family="times new roman/宋体" size=10)
                    labelattrs=(color=black  family="Times New Roman/宋体" size=10) fitpolicy=none;
run;





proc template;
  define statgraph setup;
    begingraph;
      entrytitle  halign=center  "Figure xxx.xxx.x.x Spider Plot"/ 
    textattrs=(color=black  family="times new roman/宋体" size=10);
/*    entryfootnote halign=left  "&&ffootnote&ms." / textattrs=(color=black  family="times new roman/宋体" size=7);*/
        discreteattrmap name="temp1" / ignorecase=true;
          value "1" /markerattrs=GraphData1(color=red  symbol=circlefilled  ) lineattrs=GraphData1(color=red pattern=solid ) fillattrs=GraphData1(color=red );
          value "2" /markerattrs=GraphData1(color=blue  symbol=circlefilled  ) lineattrs=GraphData1(color=blue pattern=solid) fillattrs=GraphData1(color=blue  );
          value "3" /markerattrs=GraphData1(color=green  symbol=circlefilled) lineattrs=GraphData1(color=green pattern=solid) fillattrs=GraphData1(color=green );
          value "4" /markerattrs=GraphData1(color=Orange  symbol=circlefilled) lineattrs=GraphData1(color=Orange pattern=solid) fillattrs=GraphData1(color=Orange );
        enddiscreteattrmap;

        discreteattrvar attrvar=markers1 var=ARMCD  attrmap="temp1";
        legenditem type=markerline   name="S1" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=red symbol=circlefilled) 
        lineattrs=(color=red)     label="高剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S2" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=blue symbol=circlefilled) 
        lineattrs=(color=blue)     label="中剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S3" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=green symbol=circlefilled) 
        lineattrs=(color=green)      label="低剂量组"   outlineattrs=(color=white); 

        legenditem type=markerline   name="S4" / LABELATTRS=(color=black  family="Times New Roman/宋体" size=6) markerattrs=(color=Orange symbol=circlefilled) 
        lineattrs=(color=Orange)  label="安慰剂组"   outlineattrs=(color=white);

      layout overlay / cycleattrs=true  
      yaxisopts=(gridDisplay=off LABEL="Precent Change $ from Baseline"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      LABELSPLITCHAR="$" LABELFITPOLICY=SPLITALWAYS tickvalueattrs=( size=7pt  family="Times New Roman/宋体") 
      linearopts=(tickvaluelist=(-100 -50 0 50 100 150)  tickvaluefitpolicy=none  tickvaluepriority=true ))
      xaxisopts=(display=(ticks tickvalues line label) gridDisplay=off label="Months since first dose of study drug"  labelattrs=(size=7pt   family="Times New Roman/宋体")  
      tickvalueattrs=( size=7pt  family="Times New Roman/宋体") linearopts=(tickvaluelist=(0 1 2 3 4 5 6 7 8 9 10 11 12)  tickvaluefitpolicy=none  tickvaluepriority=true ))
;
      seriesplot x=DY y=PCHG/  group=subjid  name="series1" lineattrs=(thickness=1) display=(markers)
      markercolorgroup=markers1 markerattrs=(symbol=circlefilled)
      linecolorgroup=markers1  lineattrs=(pattern=solid) ;
  
          discretelegend  "S1" "S2" "S3"  'S4'/  border=false  location=inside halign=right valign=top across=1
                title="" titleattrs=GraphValueText(color=black  family="Times New Roman/宋体" size=10pt);
    endlayout;
  endgraph;
  end;
run;


 proc sgrender data=adrs template=setup;
run; 

;

ods rtf close;

代码如上,分别采取PROC SGPLOTGTL俩种绘图方式。数据均是模拟随机产生的。关于代码中的语法,此处不做介绍,可私下与小编交流或查看SAS帮助文档。

代码下载链接:

https://www.sas-pharma.com/code/spider.txt

瀑布图

上面介绍了蜘蛛图,下面来看看瀑布图的绘制,瀑布图通常用来看肿瘤的最佳疗效评价及相对基线变化情况。

SGPLOT

GTL

0 人点赞