全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3142 7
2019-12-08
大神们,想请教个问题,


现在想画图,实现下图中的黄色部分的label,
下图是正确的 要画出的图的样子:

0.PNG

现在遇到一点问题,问题在于,要让从day1(就是横轴的D1)开始到D29 是 period 1, D43到D72 是 period 2, D85 和 D127是follow-up period,

我现在画出来的图(下图),这个对应关系不太对,我用粉色圈出来了,比如 D1 之前的,Scr那块不应该是period1, D29到D43那块应该是空的才对,D43应该算period 2, D71后面应该是follow-up period....

1.PNG

请大神们帮着看看是什么问题导致的,要怎么解决,拜谢!!!!!!!!!!

我dummy了点数据集,如下:

data dummy;
length avis aper $50;
        trtn = 1; legend='0.1A-B';avisitn = -1; avisitn_ = . ;avis = 'Scr'; aper = ''; median = 34;lclm=.;uclm=.;
        output;
        trtn = 1; legend='0.1A-B'; avisitn = 0; avisitn_ = 0 ;avis = 'D1'; aper = 'Treatment Period 1'; median = 33;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B'; avisitn = 0; avisitn_ = 0 ;avis = 'D1'; aper = 'Treatment Period 1'; median = 26.5;lclm=26;;uclm=27;
        output;
        trtn = 3; legend='0.3A-B'; avisitn = 0; avisitn_ = 0 ;avis = 'D1'; aper = 'Treatment Period 1'; median = 34;lclm=.;uclm=.;
        output;
        trtn = 1; legend='0.1A-B'; avisitn = 2; avisitn_ = 2 ;avis = 'D2'; aper = 'Treatment Period 1'; median = 31;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B';avisitn = 2; avisitn_ = 2 ;avis = 'D2'; aper = 'Treatment Period 1'; median = 28.5;lclm=27;;uclm=30;
        output;
        trtn = 3; legend='0.3A-B';avisitn = 2; avisitn_ = 2 ;avis = 'D2'; aper = 'Treatment Period 1'; median = 32;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B';avisitn  = 3; avisitn_ = 3 ;avis = 'D15'; aper = 'Treatment Period 1'; median = 27;lclm=26;uclm=28;
        output;
        trtn = 1; legend='0.1A-B';avisitn = 4; avisitn_ = 4 ;avis = 'D29'; aper = 'Treatment Period 1'; median = 34;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B'; avisitn = 4; avisitn_ = 4 ;avis = 'D29'; aper = 'Treatment Period 1'; median = 28;lclm=28;uclm=28;
        output;
        trtn = 1;legend='0.1A-B'; avisitn = 7; avisitn_ = 7 ;avis = 'D44'; aper = 'Treatment Period 2'; median = 37;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B'; avisitn = 7; avisitn_ = 7 ;avis = 'D44'; aper = 'Treatment Period 2'; median = 29;lclm=29;uclm=29;
        output;
        trtn = 1; legend='0.1A-B';avisitn = 8; avisitn_ = 8 ;avis = 'D57'; aper = 'Treatment Period 2'; median = 26;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B';avisitn = 8; avisitn_ = 8 ;avis = 'D57'; aper = 'Treatment Period 2'; median = 28.5;lclm=27;uclm=30;
        output;
        trtn = 1; legend='0.1A-B';avisitn = 9; avisitn_ = 9 ;avis = 'D71'; aper = 'Treatment Period 2'; median = 34;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B';avisitn = 9; avisitn_ = 9 ;avis = 'D71'; aper = 'Treatment Period 2'; median = 25.5;lclm=25;uclm=26;
        output;
        trtn = 1; legend='0.1A-B';avisitn = 12; avisitn_ = 12 ;avis = 'EOS/D127'; aper = 'Follow-up Period'; median = 37;lclm=.;uclm=.;
        output;
        trtn = 2; legend='0.2A-B';avisitn = 12; avisitn_ = 12 ;avis = 'EOS/D127'; aper = 'Follow-up Period'; median = 17;lclm=.;uclm=.;
        output;

run;
%let legend1 = 0.1A-B;
%let legend2 = 0.2A-B;
%let legend3 = 0.3A-B;

ods path(prepend) work.templat(update);
proc template;
  define statgraph linechart;
                ** Begin the graph template;
        begingraph / border = false designwidth = 800px designheight = 480px;
                ** Define attributes to get colour by treatment;
                discreteattrmap name = "symbols" / ignorecase = true;
                        value "&legend1." / markerattrs = (symbol = SquareFilled         color =        red         size=12)         lineattrs = (pattern=        1        color =        red        );
                        value "&legend2." / markerattrs = (symbol = CircleFilled         color =        orange         size=12)         lineattrs = (pattern=        2        color =        orange        );
                        value "&legend3." / markerattrs = (symbol = TriangleFilled         color =        blue         size=12)         lineattrs = (pattern=        5        color =        blue        );
                enddiscreteattrmap;
                discreteattrvar attrvar = groupname  attrmap = "symbols" var = legend ;

        layout lattice /  rowweights=(0.9 0.1);         
                layout overlay / walldisplay=none cycleattrs=true
                                                        /* X axis */        
                             xaxisopts = (
                                                                                  label = "Study Period/Visit"
                                          labelattrs = (family = "arial" size=9pt)
                                          display = (/*label*/ ticks tickvalues line)
                                          type = linear
                                                                                  griddisplay= off
                                          linearopts = (
                                                                                                                tickvaluefitpolicy = rotate
          /*                                                        tickvalueformat = _visx.*/
                                                        tickvaluelist = (-1 0  2 3  4   5 7 8 9 11 12 )
                                                                                                                viewmin= -1 viewmax=12               
                                                                                                                tickdisplaylist=('Scr' 'D1' 'D2' 'D15' 'D29'   'D43' 'D44' 'D57' 'D71' /*'D72'*/ 'D85' 'EOS/D127' )
                                                                                                                )
                                          tickvalueattrs = (family = "arial" size=8pt)
                                                                                  offsetmin=0.05 offsetmax=0.05
                                          )

                                                        /* Y axis */
                             yaxisopts = (label = "¶m."
                                          labelattrs = (family = "arial" size=9pt)
                                          display = (label ticks tickvalues line)
                                          type = linear
                                                                                  griddisplay= off
                                          linearopts = (
                                                                                                                tickvaluefitpolicy = none
                                                                                                                viewmin= 15 viewmax= 50               
                                                                                                                tickValueSequence=(start=15 end= 50 increment= 5 )                                                                                                               
                                                                                                                )
                                          tickvalueattrs = (family = "arial" size=8pt)
                                          );
                    /* Line Plot */
                                  seriesplot x=eval(avisitn) y=median / groupdisplay=cluster  name='pl' group= groupname index=trtn;
                                scatterplot x=eval(avisitn) y=median / yerrorlower=lclm yerrorupper=uclm name='ps' group=groupname groupdisplay=cluster index=trtn;        

                                /* Legend */
/*                                mergedlegend  'ps' 'pl' '1' '2' '3' /   */
                                discretelegend  'ps'  /
                                                                                        /*title = "Treatment Groups:"*/
                                                titleattrs = (family = "arial" size=9pt)
                                                valueattrs = (family = "arial" size=9pt)
                                                location = inside
                                                halign = right
                                                valign = top
                                                                                        across=1;
                        endlayout;

                        /* BlockPlot e.g. Treament Period 1*/
                  blockplot x=eval(avisitn_) block=aper /
                      display=(outline fill values)
                                          filltype=alternate
                                          valuehalign=center
                                  ;

                endlayout;
                entryfootnote "Study Period/Visit" / textattrs=(color=black size=10pt /*weight=bold*/)  ;
    endgraph;
  end;
run;

proc sgrender data = dummy template = linechart;
run;
谢谢大神们!!!!!!!!!!!









二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-12-9 17:10:05
或者能用别的语句实现也行
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-10 14:00:14
最简单的就是 用GTL里的  drawtext   直接画个文本框
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-10 14:14:02
BLOKPLOT好像画出来是连续的
附件列表
grstatgraph.bmp

原图尺寸 496.51 KB

grstatgraph.bmp

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-11 13:43:35
jg.sas 发表于 2019-12-10 14:00
最简单的就是 用GTL里的  drawtext   直接画个文本框
非常感谢!

我用drawtext 试了一下,出来的是这样的:
2.PNG
请问怎么能让标黄的x 轴的label再往下面移一下呀?现在好像就卡在这儿了 ,我是用entryfootnote加的label

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-12-11 16:52:23
小沐君 发表于 2019-12-11 13:43
非常感谢!

我用drawtext 试了一下,出来的是这样的:
这个解决了
用的是 在 layout overlay / 后面加  pad = (bottom = 30)  这个就是调节图下方的空白宽度
然后                entryfootnote "Study Period/Visit" / 后面也加 pad = (top = 60) ;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群