如何将多张图的内容合并在一个图中?亦或者是如何将不同(类型)的内容在一张图内输出?
输出后,如何将不同的数据用不同的形式(颜色,线条样式)展现出来以便区分?
翻遍了全网都没有比较傻瓜的操作,都是大神操作,自己琢磨了一下,教程在此献上。
首先打开SAS软件-工具-ODS图形设计器。(这个ODS图形设计器简直是一个神器,通过CLICK-CLICK菜单式点击的方式创建图像,图像创建完成后可以通过视图-代码查看图像相应的代码,对于新手简直太友好!复制粘贴在编辑器内运行可以生成一样的图,但是会有差异,差异会在下面介绍)
进去之后是这样的,然后我们新建一个序列图。
然后根据实际情况选择相应的变量。在这个例子中,我希望将访视VISIT的值作为横坐标,将均值作为纵坐标,分别生成两条折线,一条代表agegroup=1(即未成年),一条代表agegroup=2(即成年),查看这两组人在各个访视中的变化,曲线标签指的是“曲线上标的值”。
点击确定,会得到两条线。只截取了部分图像。
如果将相应代码复制粘贴到编辑器内运行,会得到一个不完全相同的图,即两条线都是实线,见下图。这就是ODS图形设计器和SAS编辑器的不同。
如果我们有多个分组访视,比如说年龄和发病,那会有四条线,青少年、成人、首发、复发,系统会将青少年和首发分配成一个颜色,成年和复发分配成另一种颜色,这样得到的四条线就只有两种颜色,见下图,非常不方便查看。所以怎么修改代码使四条线有四种颜色呢?
这个时候只需要解决一个问题,即如何将每条线都分配一种指定的颜色?
两种方法。(ps:主要看标*****的地方,没有标*****是ODS图形设计器复制粘贴的部分)
方法1:discreteattrmap和 discreteattrvar。
proc template;
define statgraph Graph;
dynamic _VISIT _MEAN_AGEGROUP _AGEGROUP _MEAN_AGEGROUP2 _VISIT2 _MEAN_AHOCCUR _AHOCCUR _MEAN_AHOCCUR2;
begingraph;
*****通过discreteattrmap语句声明映射的名称“linecolors”,并且将不同取值的“线”标记成不同颜色;
***** discreteattrmap name = "Linecolors" / ignorecase = true;
***** value "青少年" / lineattrs=(color=green );
***** value "成人" / lineattrs=(color=red );
***** VALUE "复发"/ LINEATTRS=(COLOR=PURPLE);
***** VALUE "首发" / LINEATTRS=(COLOR=BLUE);
***** enddiscreteattrmap;
***** discreteattrvar attrvar = groupcolors1 var =_AGEGROUP attrmap = "Linecolors";
***** discreteattrvar attrvar = groupcolors2 var =_AHOCCUR attrmap = "Linecolors";
layout lattice / rowdatarange=data columndatarange=data rowgutter=10 columngutter=10;
layout overlay;
***** seriesplot x=_VISIT y=_MEAN_AGEGROUP / group=groupcolors1 curvelabel=_MEAN_AGEGROUP2 name='series' connectorder=xaxis lineattrs=(pattern=SOLID );
discretelegend 'series' 'series2' / opaque=false border=true halign=left valign=center displayclipped=true across=1 order=rowmajor location=inside;
***** seriesplot x=_VISIT2 y=_MEAN_AHOCCUR / group=groupcolors2 curvelabel=_MEAN_AHOCCUR2 name='series2' connectorder=xaxis lineattrs=(pattern=SOLID );
endlayout;
endlayout;
endgraph;
end;
run;
proc sgrender data=RAWDATA.MERGED template=Graph;
dynamic _VISIT="VISIT" _MEAN_AGEGROUP="'MEAN_AGEGROUP'n" _AGEGROUP="AGEGROUP" _MEAN_AGEGROUP2="'MEAN_AGEGROUP'n" _VISIT2="VISIT" _MEAN_AHOCCUR="'MEAN_AHOCCUR'n" _AHOCCUR="AHOCCUR" _MEAN_AHOCCUR2="'MEAN_AHOCCUR'n";
run;
代码运行结果如下,左下角是有分项图例(表明哪个线是代表哪个组的小图像),但是没截出来。
方法2:COLORMODEL COLORRRESPONSE
直接在原来的代码的seriesplot可选语句后添加colormodel和colorresponse语句。
seriesplot x=_VISIT2 y=_MEAN_AHOCCUR / group=_AHOCCUR curvelabel=_MEAN_AHOCCUR2 name='series2' connectorder=xaxis lineattrs=(pattern=SOLID ) COLORMODEL=(BLUE YELLOW BLACK PINK) COLORRESPONSE=_AHOCCUR;
这样生成的图像也会有不同颜色,缺点是分项图例那里没办法和线的颜色同步。所以还是方法1比较好。