怎么用PROC SGPLOT改进你的作图

SAS一些PROC步可以产生带有统计意义的图表, 通常情况下,我们对这些统一模板下出来的图不是很满意。
data trans;
input temp @@;
cards;
…..
;
run;

proc univariate data=Trans ;
histogram Temp / normal(percents=20 40 60 80 midpercents)
endpoints = 360 to 620 by 1;
inset n mean std / pos = ne format = 6.3;
output   out=ex n=n1 min=min2 max=max3 std=std4 mean=mean5;
run;

这个直方图颜色昏暗,满眼的小长柱让图感觉像块抹布,不通透,压抑感很强。虽然这个proc提供了很多改进图的选项来弥补这些缺点,但是你无法改变它是直方图的本质。现在想把把柱子(表示某个数出现的频率)变成点,可能感觉不一样。

这里暂且给出一个方法用SGPLOT来解决。

注:由于上传中网站压缩导致红星有阴影。

上下两个图对比发现,部件一个都不少(特别是图右上角的标识框), 星号代替了方柱。

代码如下:

data trans;
input temp @@;
cards;

;

run;

ods select  Bins ;
ods output bins=bins;
proc univariate data=Trans;
histogram Temp / normal(percents=20 40 60 80 midpercents)
endpoints = 360 to 620 by 1;
inset n mean std / pos = ne format = 6.3;
output out=ex n=n1 min=min2 max=max3 mean=mean4 std=std5;
run;
data _null_;
set ex;
call symput(‘n’,n1);
call symput(‘min’,min2);
call symput(‘max’,max3);

meanx=put(mean4,8.2) ;
call symput(‘mean’,meanx);

stdx=put(std5,8.3);
call symput(‘std’,stdx);

mxnum6=round((max3-min2)/5,1);

call symput(‘mxnum’, mxnum6);
/*%let mean=%substr(&meanx.,1, %eval(%index(&meanx.,.)+2));*/
/*%let  std=%substr(&stdx., 1, %eval(%index(&stdx.,.)+3));*/
run;

proc sgplot data=bins  NOAUTOLEGEND;
yaxis label=’Percent (%) ‘ values=(0 to 2 by 0.2);
xaxis label=’Var’ values=(&min. to &max. by &mxnum.);
scatter y=obsPercent x=  MinPoint  / MARKERATTRS=(SYMBOL=asterisk color=red);
SERIES   y=estPercent x=  MinPoint / MARKERATTRS=(color=blue) ;
inset (“N”=”&n.”  “均值”=”&mean.”    “标准差”=”&std.”)
/ POSITION = TOPRIGHT BORDER;
Title;
run;
quit;

说明:上代码有一定的通用性,当然还有很多细节如横纵坐标标签、标题、中位数参考线和标记等等都还可以继续添加。

如下加了中位数,众数标识线的。

数据来源:peijiamei
http://www.pinggu.org/bbs/thread-852915-1-1.html


相关博文

《怎么用PROC SGPLOT改进你的作图》上的一个想法

  1. 兄弟,非常感谢你上次教我的文件合并的方法,后来想感谢你,一直没有你的消息,你得空间有很长时间没有消息了 。我对SAS很感兴趣,但是实在太菜,我有两个SAS问题困扰了我半年了,希望能请你帮忙指教,必当感谢!! 我的手机15026601822兄弟,非常感谢你上次教我的文件合并的方法,后来想感谢你,一直没有你的消息,你得空间有很长时间没有消息了,能否告知你的联系方式啊

发表评论

邮箱地址不会被公开。 必填项已用*标注