提前祝大家新年快乐,兔年突~突~突~突~突!
没有显示屏就是不舒服,甚至想在老家买块显示屏,但是知道自己的尿性,大多数时间都在玩,混,学习是不可能学习的,所以买了也是吃灰...
-----------------------------------------------
临床项目中的图形,大多数时候是为了让数据以更直观清晰的角度呈现,所以对于图形中的线条颜色、形状可能只要不同组能区分开来就行了。
但是有时候项目会有特殊需求,比如说要求某个组用什么颜色,某个组用什么形状,这个时候就有些麻烦了,所以我们今天就来讲一讲如何处理这种情况。我们以SASHELP.CLASS数据集为例,以‘男女’当作两个不同的组别,_n_作为X轴.
一:指定颜色和形状等属性
指定某个组别用什么颜色可以通过discreteattrmap和discreteattrvar。下面我来解释一下各个参数的意思,今天讲到的基础知识在后面就不讲了:
1:discreteattrmap:定义一组图形属性,这些属性可以与用户定义的值集相关联。这个单词可以分成几部分,discrete:离散的,可以理解为有多组;attr:attribute的缩写,属性,也就是我们在这个里面定义多个组的属性,也就是我们可以根据我们数据集里面的值定义我们想要的属性,比如颜色,形状等。注意写完之后要加上enddiscreteattrmap;
有几个需要注意的点,我就不翻译了,重点标出来了,直接从SASHELP复制过来
①:You must place the DISCRETEATTRMAP block directly inside the BEGINGRAPH block between the BEGINGRAPH statement and the first LAYOUT statement. Do not embed it in any other GTL statement block.位置看下面的程序,看看DISCRETEATTRMAP 放在哪。
②:The DISCRETEATTRMAP block must contain at lease one VALUE statement.
③:The DISCRETEATTRVAR statement must be used to associate the discrete attribute map with a data column.
1.1:name="" 这个选项必须要有,相当于为你定义的属性起了一个名字,方便后面DISCRETEATTRVAR调用,否则你定义的那些属性,怎么实现在图里呢。该名称可以在DISCRETEATTRVAR语句中引用,该语句用于将属性映射(attribute map)与输入数据列(数据集中的变量)关联起来。
name=""XXXX字符串区分大小写,必须用引号括起来。
1.2:value="XXXX",可以简单理解为引号里面的就是数据集里面的某个变量的值,是你准备分组的变量,在这个例子中是SEX,但是在项目中可能就是TRT01A,看你要为什么分组。
specifies one or more formatted strings or the keyword OTHER. Strings are always quoted. Multiple strings must be separated by blanks, and each of the strings must be enclosed in its own set of quotation marks. The formatted strings must be equal to the formatted values of the classification column that is used with the DISCRETEATTRVAR statement.
value="XXXX"后面加上一个斜杠,就可以定义更多的属性,比如线条的属性(LINEATTRS),标志的属性(MARKERATTRS),所以你看我在程序中定义了线条的颜色,但是没有定义加号的属性,突然冒出了蓝色的加号,就莫名其妙,我在画KM图时没有定义标志的颜色也正常显示,但是大家最好还是加上吧。
加上标志的属性后,markerattrs=(color=red ),颜色正常显示了
discreteattrmap就这几个重要的选项就能实现为不同组定义不同的属性,但是我们只是定义了属性,但是怎么告诉SAS我画图的时候,碰到不同的组的时候,需要用上我提前定义的属性呢?这就需要用到DISCRETEATTRVAR statement。
2:DISCRETEATTRVAR:Creates a named association between a user-defined discrete attribute map and an input data column.
DISCRETEATTRVAR相当于一座桥梁,将我们自己定义的属性和画图的数据集联系起来。就这么理解就差不多了。需要注意的点也是上面的①讲到的。
2.1:ATTRVAR=attrvar-name:specifies a SAS name for this association between the attribute map and the input column.
DISCRETEATTRVAR调用discreteattrmap起的名字,但是DISCRETEATTRVAR起的名字就得在后面的GTL语句调用了,也就是后面的group=DIFCOL_name。所以这两个调用的名字和地方需要注意一下。同时ATTRVAR=不需要引号,直接等于一个名字。
2.2:VAR=data-column| expression | dynamic,这个VAR选项specifies an input data column to be associated with an attribute map at run time.也就是VAR选项直接指明哪个变量用于属性展示
If the column is not found or the column is of the wrong type for the attribute map, then the DISCRETEATTRVAR statement is ignored.
2.3:ATTRMAP="attrmap-name ":specifies the name of an existing discrete attribute map.ATTRMAP调用上面discreteattrmap起的名字
通过这3个选项,DISCRETEATTRVAR完成了承上启下的作用,它自己本身有名字了(ATTRVAR),便于SAS调用;又告诉了SAS哪个变量用于属性展示,又把属性和数据集变量联系起来。
所以到后面我们直接用group=XXX直接调用我们设定的属性就可以了。
discreteattrmap和discreteattrvar还有很多选项和一些需要注意的地方,这个你们自己去查SAShelp吧,我在这里就不多讲了。
二:合并标签
如图中所示,我们展示图例的时候,只有横线,如果我们还想把加号合并到横线上怎么实现呢?很简单,一个MERGEDLEGEND选项就够了
MERGEDLEGEND 'step' 'scatter'/location= inside halign=right valign=bottom valueattrs=(size=8) border= yes across=1;
把你要合并标签的引用名称都放在一起就可以实现了,所以也不多讲了
代码在另一个地方