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