在临床试验SAS编程中,会遇到输出不同试验组的观测指标的各类图形,我分享一下在这个过程中处理分组(Group)问题的一些想法。
关于图形输出的分组处理,通常有两种处理方法:
- 将不同分组的反应变量,做成不同的变量,用多个出图语句对新生成的反应变量进行处理;
- 应用Group选项,用一个出图语句生成每一分组对应的图形。
以SAS中自带的Stocks数据集,进行编程说明。Sashelp.Stocks数据集中收集IBM、Intel、Microsoft三家公司从86年到05年每月初的价股票价格成交信息,我们使用02年的数据,输出这三个公司这一年股价的走势图。
处理方法一:将股票收盘价Close,根据公司Stock的不同,赋值到新变量Close_IBM、Close_Intel、Close_Microsoft中,用三个Seriesplot语句进行图形输出。
***Get data for figure put;
data stocks1;
set sashelp.stocks(where=(date between "1jan02"d and "31dec02"d));
format date MONNAME3.;
if stock = "IBM" then close_ibm = close;
else if stock = "Intel" then close_intel = close;
else if stock = "Microsoft" then close_microsoft = close;
run;
***Create figure template;
proc template;
define statgraph Seriesplot1;
begingraph;
layout overlay/
yaxisopts=(label="Close")
xaxisopts=(label="Month" type=discrete);
seriesplot y = close_ibm x = date / name = "Seriousplot1";
seriesplot y = close_intel x = date / name = "Seriousplot2";
seriesplot y = close_microsoft x = date / name = "Seriousplot3";
endlayout;
endgraph;
end;
run;
***Render template;
proc sgrender data=stocks1 template=Seriesplot1;
run;
方法一的输出结果:
处理方法二:应用Group选项,将stock作为分组变量,用一个出图语句生成每一分组对应的图形。具体的代码如下:
***Get data for figure put;
data stocks2;
set sashelp.stocks(where=(date between "1jan02"d and "31dec02"d));
format date MONNAME3.;
run;
***Create figure template;
proc template;
define statgraph Seriesplot2;
begingraph;
layout overlay/
yaxisopts=(label="Close")
xaxisopts=(label="Month" type=discrete);
seriesplot y = close x = date / group = stock groupdisplay = cluster name = "Seriousplot";
endlayout;
endgraph;
end;
run;
***Render template;
proc sgrender data=stocks2 template=Seriesplot2;
run;
方法二的输出结果:
示例代码只是简单的输出的折线图,关于图的其他属性都没有进行额外的设置。从图中可以看到,第二种方法中Group选项会自动给不同分组的线图分配不同的颜色;方法一中3条线图的属性都相同,在实际运用中需要对其线的属性单独设置。
我会在接下来的文章中继续分享有关Figure分组的问题(分组的属性设置、方法一的适用范围等)。
若有疑问,欢迎评论区留言讨论。
相关文章:
关于SAS GTL输出Figure的分组(Group)问题的分享2--Legend设置
关于SAS GTL输出Figure的分组(Group)问题的分享3--Group选项的属性设置
关于SAS GTL输出Figure的分组(Group)问题的分享4--图标(Legend)内容的设置