《SAS编程演义》笔记(8章)

菱花荇蔓随双桨:百变绘图

ODS Graphics System

  • ODS Graphics System的语法简介统一,易于学习
  • ODS Graphics System已包含在BASE模块中,不像GRAPH还要单独购买

ODS Graphics System的五大部件:

  • ODS Graphics 语句
    • 通过ON或OFF开关启用ODS Graphics
    • 通过统计过程选项PLOTS选项创建ODS Graphics
    • 通过BRODER、WIDTH、HEIGHT、OUTPUTFMT、IMAGENAME等控制边框、宽、高、输出格式、以及图片名称。
1
2
3
4
5
6
/*ODS GRAPHICS语句设置图片的宽、高、边界、名字、格式,并要求绘制累积事件*/
ods graphics on / width=20cm height=18cm noborder imagename="failureplot" outputfmt=jpg;
proc lifetest data=sashelp.bmt plots=(s(f));
time t*status(0);
strata group;
run;
  • ODS Graphics设计器:通过图形化交互式界面创建、设计个性化的ODS Graphics,并自动生成GTL
    • 运行SAS自带的宏程序%sddesign来启动
    • 菜单->工具->SAS ODS Graphics设计器启动
  • ODS Graphics编辑器:通过图形化的交互式界面修改ODS Graphics的元素
1
2
3
4
5
6
7
8
/*在ODS Destination中用sge-on来打开,再生成ODS Graphics时,就会生成可编辑的SGE文件*/
ods html sge=on;
ods graphics on / width=20cm height=18cm noborder imagename="failureplot" outputfmt=jpg;
proc lifetest data=sashelp.bmt plots=(s(f));
time t*status(0);
strata group;
run;
ods html sge=off;
  • ODS Graphics 过程:通过简单、简洁的语法创建各式各样的统计图形,包括5个过程:
    • SGPLOT:创建多种多样的单个图(单格图)
    • SGPANEL:创建面板图(多格图)
    • SGSCATTER:创建矩阵散点图
    • SGDESIGN:基于SAS ODS Graphics 设计器文件创建图形
    • SGRENDER:基于图形模版语言(GTL)和SGE文件创建图形
1
2
3
4
5
6
7
8
proc sgplot data=sashelp.class;
scatter x=height y=weight;
reg x=height y=weight / cli clm;
run;
proc sgplot data=sashelp.class;
vbar sex / respose=weight;
run;
  • SAS GTL:图形模版语言,一种创建复杂的、个性化图形的绘图语言。具体使用时先通过TEMPLATE过程定义,再通过SGRENDER加载渲染。

    1. 定义,在PROC TEMPLATE过程中用DEFINE STARTGRAPH语句块定义绘图模版。

    proc template;

    ​ define statgraph template-name;

    ​ begin graph / <options>;

    ​ <gtl statements to define the graph>

    ​ endgraph;

    ​ end;

    run;

    1. 渲染,用PROC SGRENDER关联绘图数据与绘图模版,渲染生成图形。

    proc serenader data=data-set-name

    ​ template=template-name;

    run;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
proc template;
define statgraph scatterreg;
begingraph;
layout overlay;
scatterplot x=height y=weight;
regressionplot x=height y=weight / name="fitline" legendlabel="Regression line" clm="clm" cli="cli";
modelband "clm" / name="bandclm" legendlabel="95% CLM" datatransparency=0.3;
modelband "cli" / name="bandcli" legendlabel="95% CLI" display=(outline);
discreatelegend "fitline" "bandclm" "bandcli";
endlayout;
endgraph;
end;
run;
proc sgrender data=sashelp.class template=scatterreg;
run;

设计原则

  • Less is more
  • 点:让每一个点清晰可见。
  • 线:不同组的线条应该用不同颜色或不同样式区分,可依据需要添加趋势线和参考线。
  • 条:一般不给条加边框,不建议条之间重叠,条与条之间间隔比例为1:1.5~1:0.5为宜;建议颜色填充而非样式,可用颜色强度代表重要程度;如果希望显示排名顺序或分类标签太长、分类太多,建议用横向条图。
  • 刻度线:刻度尺过于离散,建议用Log转换,一般情况下,纵坐标刻度要从零开始
  • 图例:确实需要说明时才增加图例;为不使图例喧宾夺主,一般不加边框;图例一般置于图右侧,若图较宽、图例文字较长时,图例横向置于图内的上/下方。
  • 其他:不建议用饼图、不建议用3D图

条图系列

单式条图

要分析的变量就一个分类变量时,此时适用单式条图或百分比条图。

  • HBAR:横向条图
  • VBAR:纵向条图
  • CATEGORYORDER=:排序方式
1
2
3
4
5
6
7
proc sgplot data=sashelp.cars;
hbar DriveTrain / categoryorder=respdesc; /*横向 响应值降序*/
run;
proc sgplot data=sashelp.cars;
vbar DriveTrain / categoryorder=respssc; /*纵向 响应值升序*/
run;

横向条图

频数图

使PROC FREQ里TABLE语句的选项PLOTS=FREQPLOTS,此选项会自动调用ODS Graphics System绘制频数图。

1
2
3
proc freq data=sashelp.cars;
table DriveTrain / plots=freqplots;
run;

频数图

带误差限的单式条图

  • RESPONSE:指定连续变量
  • STAT=:指定统计指标
  • LIMITSTAT=:stddev, stderr, clm 指定限制线统计量
  • LIMITS=:upper, lower, both 指定限制线展示形式
1
2
3
proc sgplot data=sashelp.cars;
vbar type /response=msrp stat=mean limitstat=stddev limits=upper;
run;

带误差限的单式条图条图

单式百分比条图

单式百分比条图在绘制时需要先增加辅助分组变量,而后通过PROC SGPLOT的HBAR或VBAR实现。

  • GROUP=:指定分组变量
  • GROUPDISPLAY=:指定为堆叠方式显示
  • STAT=PERCENT:指定统计指标为百分比
1
2
3
4
5
6
7
8
data cars;
set sashelp.cars;
Drive_Train="Drive Type"; /**/
run;
proc sgplot data=cars noborder;
hbar Drive_Train / group=DriveTrain groupdisplay=stack stat=percent categoryorder=respdesc;
run;

单式百分比条图

簇拥式复式条图

单式百分比条图就是复式条图的一种特例。

  • GROUP=:指定分组变量
  • GROUPDISPLAY=:控制分组显示方式,簇拥式(cluster),堆叠式(stack)
1
2
3
proc sgplot data=sashelp.cars;
vbar origin / group=DriveTrain groupdisplay=cluster;
run;

簇拥式复式条图

簇拥式复式误差限条图

  • RESPONSE:指定连续变量
  • STAT=:指定统计指标
  • LIMITSTAT=:stddev, stderr, clm 指定限制线统计量
  • LIMITS=:upper, lower, both 指定限制线展示形式
  • GROUP=:指定分组变量
1
2
3
proc sgplot data=sashelp.cars;
vbar origin / response=msrp stat=mean group=type groupdisplay=cluster limitstat=stddev limits=lower;
run;

簇拥式复式误差限条图

复式百分比条图

  • PCTLEVEL=GROUP:控制百分比为分组的百分比
1
2
3
4
5
6
7
proc sgplot data=sashelp.cars pctlevel=group;
vbar origin / group=DriveTrain groupdisplay=cluster stat=percent; /*簇拥式*/
run;
proc sgplot data=sashelp.cars pctlevel=group;
vbar origin / group=DriveTrain groupdisplay=stack stat=percent; /*堆叠式*/
run;

簇拥式复式误差限条图

马赛克图

使PROC FREQ里TABLE语句的选项PLOTS=MAOSAICPLOT,此选项会自动调用ODS Graphics System绘马赛克图。

1
2
3
proc freq data=sashelp.cars;
table origin*DriveTrain / plots=mosaicplot;
run;

马赛克图

镜面式复式条图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
data pop; /*创建测试数据集*/
length AgeGroup $12;
do AgeGroup='Pre Teen', 'Teen', 'Young Adult', 'Adult', 'Senior';
Male=round(500*(1+ranuni(2)));
Female=round(400*(1+ranuni(2)));
output;
end;
run;
data butterfly; /*变换镜面数据*/
set pop;
Male=-male;
zero=0;
run;
proc format; /**/
picture positive low-<0='0000' 0<-high='0000';
/*0-high包含0 0<-high不包含0*/
run;
proc sgplot data=ButterFly; /*横向镜面*/
format male female positive.;
hbarparm category=agegroup response=male;
hbarparm category=agegroup response=female;
xaxis display=(noline nolabel) values=(-1000 to 1000 by 200);
yaxis display=(noline nolabel);
keylegend / position=right across=1 noopaque;
run;
proc sgplot data=ButterFly; /*纵向镜面*/
format male female positive.;
vbarparm category=agegroup response=male;
vbarparm category=agegroup response=female;
xaxis display=(noline nolabel);
yaxis display=(noline nolabel) values=(-1000 to 1000 by 200);
keylegend / position=right across=1 noopaque;
run;

横向镜面复式条图

面板条图

通过PROC SGPANEL实现面板条图,用PANELBY语句指定面板分量。

1
2
3
4
5
6
7
8
9
proc sgpanel data=sashelp.cars pctlevel=group; /**/
panelby type;
vbar origin / group=DriveTrain groupdisplay=cluster stat=percent;
run;
proc sgpanel data=sashelp.cars pctlevel=group; /**/
panelby type;
vbar origin / group=DriveTrain groupdisplay=stack stat=percent categoryorder=respdesc;
run;

簇拥式面板条图

直方图系列

简单直方图

  • NBINS:直方的数量
  • BINWIDTH:直方的宽度
1
2
3
4
5
6
7
proc sgplot data=sashelp.cars; /*简单直方图(sgplot)*/
histogram msrp / nbins =20;
run;
proc univariate data=sashelp.cars; /*简单直方图(univariate)*/
histogram msrp;
run;

简单直方图

重叠直方图

  • 可以用GROUP设置分组变量,也可以用多个HISTOGRAM语句叠加
  • 使用TRANSPARENCY设置透明度
1
2
3
4
5
6
7
8
proc sgplot data=sashelp.cars; /*通过group设置分组变量*/
histogram msrp / nbins=20 group=type;
run;
proc sgplot data=sashelp.cars; /*多个histogram叠加*/
histogram mpg_city / binstart=0 binwidth=2 transparency=0.5;
histogram mpg_highway / binstart=0 binwidth=2 transparency=0.5;
run;

重叠直方图

镜面直方图

无法通过 SGPLOT直接实现,需要借助GTL语言。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*定义模版*/
proc template;
define statgraph MirrorHistogramVert;
dynamic _binwidth;
begingraph;
entrytitle "Mileage distribution";
/*定义布局*/
layout lattice / columndatarange=union rowgutter=0;
/*定义横轴*/
columnases;
columnaxis / display=(tickvalues) griddisplay=on linearopts=(tickvaluesequence=(start=0 end=60 increment=10) tickvaluepriority=true);
endcolumnases;
/*上部分直方图*/
layout overlay / walldisplay=none xaxisopts=(griddisplay=on) yaxisopts=(griddisplay=on display=(tickvalues label) linearopts=(tickvaluesequence=(start=5 end=25 increment=5) tickvaluepriority=true));
histogram mpg_city/binstart=0 binwidth=_binwidth binaxis=false fillattrs=graphdata1 datatransparency=0.3;
entry halign=right "City Mileage" / valign=top;
endlayout;
/*下部分直方图*/
layout overlay / walldisplay=none xaxisopts=(griddisplay=on) yaxisopts=(reverse=true griddisplay=on display=(tickvalues label) linearopts=(tickvaluesequence=(start=5 end=25 increment=5) tickvaluepriority=true));
histogram mpg_highway/binstart=0 binwidth=_binwidth binaxis=false fillattrs=graphdata2 datatransparency=0.3;
entry halign=right "City Mileage" / valign=top;
endlayout;
endlayout;
endgraph;
end;
run;
/*渲染模版*/
ods graphics / NOBORDER reset width=5in height=3in imagename="MirrorHistogramVert";
proc sgrender data=sashelp.cars template=MirrorHistogramVert;
dynamic _binwidth=2;
run;

镜面直方图

面板直方图

通过PROC SGPANEL和HISTOGRAM语句来实现

1
2
3
4
5
proc sgpanel data=sashelp.cars;
panelby origin / layout=columnlattice;
histogram mpg_city / binstart=0 binwidth=2 transparency=0.5;
histogram mpg_highway / binstart=0 binwidth=2 transparency=0.5;
run;

面板直方图

箱型图系列

箱线图提供了更为明确的统计量信息,如均数,P25,P50以及P75。箱线图可以通过PROC SGPLOT的VBOX或HBOX实现。

简单箱型图

1
2
3
4
5
6
7
proc sgplot data=sashelp.cars;
vbox msrp; /*纵向*/
run;
proc sgplot data=sashelp.cars;
hbox msrp; /*横向*/
run;

简单箱型图

分组箱型图

分组箱形图的绘制只需在VBOX或HBOX语句中增加用GROUP分组变量即可。

1
2
3
proc sgplot data=sashelp.cars;
vbox msrp / group=type;
run;

分组箱型图

面板箱型图

面板箱型图可通过PROC SGPANEL过程实现。

1
2
3
4
proc sgpanel data=sashelp.cars;
panelby origin / layout=columnlattice;
vbox msrp / group=type;
run;

面板箱型图

散点图系列

X-Y散点图

X-Y散点图可通过PROC SGPLOT的SCATTER语句实现。

1
2
3
proc sgplot data=sashelp.cars;
scatter x=horsepower y=mpg_highway;
run;

X-Y散点图

X-Y散点回归图

  • 使用REG语句增加回归线
1
2
3
4
proc sgplot data=sashelp.cars;
scatter x=horsepower y=mpg_highway;
reg x=horsepower y=mpg_highway;
run;

X-Y散点回归图

分组散点图

  • 使用GROUP选项增绘制分组散点图
1
2
3
proc sgplot data=sashelp.cars;
scatter x=horsepower y=mpg_highway / group=type;
run;

分组散点图

面板散点图

在PROC SGPANEL中用PANELBY语句指定分面变量,而后用SCATTER语句绘制散点图。

1
2
3
4
proc sgpanel data=sashelp.cars;
panelby origin / layout=columnlattice;
scatter x=horsepower y=mpg_highway / group=type;
run;

面板散点图

泡泡图

增加一个变量控制散点图中点的大小,通过PROC SGPLOT中的BUBBLE实现。

1
2
3
proc sgplot data=sashelp.cars;
bubble x=horsepower y=mpg_highway size=cylinders;
run;

泡泡图

矩阵散点图

探查多个变量之间两两的关系。通过PROC SGSCATTER实现。

1
2
3
proc sgscatter data=sashelp.cars;
matrix mpg_highway horsepower enginesize / diagonal=(histogram noraml);
run;

矩阵散点图

折线图系列

简单折线图

若X与Y一一对应,可以用SERIES语句绘制。

1
2
3
proc sgplot data=sashelp.stocks (where=(date >= "01jan2002"d and stock="IBM"));
series x=date y=close;
run;

简单折线图(X与Y一一对应)

若X与Y不是一一对应,可以用VLINE或HLINE语句绘制。

1
2
3
proc sgplot data=sashelp.cars;
vline cylinders / response=msrp stat=mean markers;
run;

简单折线图(X与Y不是一一对应)

误差折线图

使用LIMITS和LIMITSTAT。

1
2
3
proc sgplot data=sashelp.cars;
vline cylinders / response=msrp stat=mean limits=both limitstat=stddev markers;
run;

误差折线图

分组误差折线图

用GROUP选项指定分组变量。

1
2
3
proc sgplot data=sashelp.cars;
vline cylinders / response=msrp stat=mean group=type limits=both limitstat=stddev markers;
run;

分组误差折线图

面板误差折线图

PROC SGPANEL过程中使用PANELBY语句。

1
2
3
4
proc sgpanel data=sashelp.cars;
panelby origin / layout=columnlattice;
vline cylinders / response=msrp stat=mean group=type limit=both limitstat=stddev markers;
run;

面板误差折线图

面积图系列

面积图

通过PROC SGPLOT的BAND语句实现。

1
2
3
4
5
6
7
8
9
10
/*重叠面积图*/
proc sgplot data=sashelp.stocks(where=(date>="01jan2002"d and stock="IBM"));
band x=date lower=0 upper=high / legendlabel="High";
band x=date lower=0 upper=low / legendlabel="Low";
run;
/*非重叠面积图*/
proc sgplot data=sashelp.stocks(where=(date>="01jan2002"d and stock="IBM"));
band x=date lower=0 upper=high / legendlabel="High";
run;

面积图

带状图

通过PROC SGPLOT的BAND语句实现。

1
2
3
proc sgplot data=sashelp.stocks(where=(date>="01jan2002"d and stock="IBM"));
band x=date lower=low upper=high / legendlabel="High";
run;

带状图

拟合图系列

密度曲线

可以用PROC UNIVARIATE过程中的HISTOGRAM语句,也可以用PROCSGPLOT的DENSITY语句。

1
2
3
4
5
6
7
8
proc univariate data=sashelp.cars; /*统计过程*/
histogram msrp / normal;
run;
proc sgplot data=sashelp.cars; /*绘图过程*/
histogram msrp / nbins=20;
density msrp;
run;

密度曲线

回归线

可以用PROC REG过程中的PLOTS选项,也可以用PROC SGPLOT的REG语句。

1
2
3
4
5
6
7
8
proc reg data=sashelp.cars plots(only)=fitplot; /*统计过程*/
model mpg_highway=horsepower;
run;
proc sgplot data=sashelp.cars; /*绘图过程*/
scatter x=horsepower y=mpg_highway;
reg x=horsepower y=mpg_highway / cli clm;
run;

回归线

椭圆曲线

通过PROC SGPLOT的ELLIPSE语句实现。

1
2
3
4
proc sgplot data=sashelp.cars;
scatter x=horsepower y=mpg_highway;
ellipse x=horsepower y=mpg_highway;
run;

椭圆曲线

ROC曲线

通过PROC LOGISTIC回归的PLOTS选项实现。

1
2
3
4
proc logistic data=sashelp.heart plots=roc;
class sex Chol_Status BP_Status Weight_Status Smoking_Status;
model Status(event="Dead")=AgeAtStart sex Chol_Status BP_Status Weight_Status Smoking_Status;
run;

ROC曲线

Kaplan-Meier曲线

通过PROC LIFETEST的PLOTS选项实现。

1
2
3
4
5
/*生存曲线*/
proc lifetest data=sashelp.bmt plots=s;
time t*status(0);
strata group;
run;

生存曲线

1
2
3
4
5
/*累积事件*/
proc lifetest data=sashelp.bmt plots=s(failure);
time t*status(0);
strata group;
run;

累积事件

LOESS曲线

局部加权回归散点发(Locally Weighted Scattered Plot Smoothing, LOESS)

  • PROC LOESS过程的PLOTS语句,AICC选项指定平滑程度
  • PROC SGPLOT过程的LOESS语句,SMOOTH选项指定平滑程度
1
2
3
4
5
6
7
proc loess data=sashelp.cars plots(only)=(FItPlot);
model mpg_highway=horsepower / select=AICC alpha=0.05 all;
run;
proc sgplot data=sashelp.cars;
loess x=horsepower y=mpg_highway;
run;

LOESS曲线

Spline曲线

SAS中最容易实现的样条函数是Penalized B-Spline Curve,可通过PROC SGPLOT里的PBSPLINE语句绘制。

1
2
3
proc sgplot data=sashelp.cars;
pbspline x=horsepower y=mpg_highway;
run;

LOESS曲线

森林图系列

通过PROC SGPLOT的SCATTER语句及其XERRORUPPER和XERRORLOWER选项绘制,或通过highlow语句绘制。

简单森林图

  • 用HIGHLOW语句绘制效应值机器95%CI
  • 文字部分借助9.4的新语句YAXISTABLE直接插入文字变量
1
2
3
4
5
6
7
8
9
10
11
12
13
proc sgplot data=fr noautolegend nocycleattrs nowall noborder;
/*文字*/
yaxistable Study CABG PCI_DES RR / position=left labelattrs=(size=7);
/*图*/
scatter y=study x=rr_m / markerattrs=graphadata2(symbol=squarefilled);
scatter y=study x=rr_2 / markerattrs=graphadata2(symbol=diamondfilled size=10);
highlow y=study low=rr_1 high=rr_u / type=line;
/*坐标轴*/
xaxis values=(0 to 3 by 1) display=(nolabel) valueattrs=(size=7);
yaxis display=none fitpolicy=none reverse colorbands=even valueattrs=(size=7) colorbandattrs=Graphdatadefault(transparency=0.8);
/*参考线*/
refline 1 /axis=x noclip;
run;

简单森林图

亚组分析森林图

SAS 9.40M3的STYLEATTRS语句新增了AXISEXTENT选项,YAXISTABLE语句增加了INDENTWEIGHT和PAD选项,可以单凭SGPLOT完美实现亚组分析森林图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
proc sgplot data=forest_subgroup_2 nowall noborder nocycleattrs dattrmap=attrmap noautolegend;
styleattrs axisextent=data;
/*左边的文字*/
yaxistable subgroup / location=inside position=left textgroup=id labelattrs=(size=7) textgroupid=text indentweight=indentWt;
yaxistable countpct / location=inside position=left labelattrs=(size=7) valueattrs=(size=7);
yaxistable PCIGroup group pvalue / location=inside position=right pad=(right=15px) labelattrs=(size=7) valueattrs=(size=7);
/*绘制95%CIBAR*/
highlow y=obsid low=low high=high;
/*绘制Bar的中点*/
scatter y=obsid x=mean / markerattrs=(symbol=squarefilled);
/*二次绘制Bar中点,关联x2axis*/
scatter y=obsid x=mean / markerattrs=(size=0) x2axis;
/*底部文字*/
text x=xl y=obsid text=text / position=bottom contributeoffsets=none strip;
format text $txt.;
/*坐标轴*/
yaxis reverse display=none colorbands=odd colorbandsattrs=(transparency=1) offsetmin=0.0;
xaxis display=(nolabel) values=(0.0 0.5 1.0 1.5 2.0 2.5);
x2axis label='Hazard Ratio' display=(noline noticks novalues) labelattrs=(size=8);
/*参考线*/
refline 1 / axis=x;
refline ref / lineattrs=(thickness=13 color=cxf0f0f7);
run;

亚组分析森林图

地图系列

纯地图

  • MAP:指定地图数据集
  • DATA:指定反应数据集,即使不在地图上绘制反应变量,仍需指定反应数据集(反应数据集可以和地图数据集是一个数据集)
  • 添加各州名称标注:用USattr这个属性数据集,并利用SAS自带的宏给地图增加标签说明文字,生成标注数据集,然后绘制地图时用ANNO选项指定标注数据集。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%annomac
%maplabel(mapsgfk.us, mapsgfk.us_states_attr(keep-id idname), anno_label,idname, id)
proc gmap map=maps.us data=maps.us;
id state;
choro state / nolegend anno=anno_label;
run;
quit;
proc gmap map=maps.us data=maps.us;
id state;
choro state / nolegend;
run;
quit;
proc gmap map=mapsgfk.us data=mapsgfk.us;
id id;
choro id / nolegend;
run;
quit;

纯地图

统计地图

BLOCK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
data sample;
input st $ pop2010 @@;
state=stfips(st);
datalines;
AL 4779 Ak 710 AZ 6392 AR 2815 CA 37253 CO 5029 CT 3574 DE 897 DC 601 FL 18801
GA 9687 HI 1360 ID 1567 IL 12830 IN 6483 IA 3046 KS 2853 KY 43339 LA 4533
ME 1328 MD 5773 MA 6547 MI 9883 MN 5303 MS 2967 MO 5988 MT 989 NE 1826 NV 2700
NH 1316 NJ 8791 NM 2059 NY 19378 NC 9535 ND 672 OH 11536 OK 3751 OR 3831
PA 12702 RI 1052 SC 4625 SD 814 TN 6346 TX 25145 UT 2763 VT 6257 VA 8001
WA 6724 WV 1852 WI 5686 WY 563 PR 3725
;
run;
proc gmap map=maps.us data=sample;
id state;
block pop2010 / level=6;
format est2015 pop2010 comma12.;
run;
quit;

统计地图

热力地图

CHORO

1
2
3
4
5
6
proc gmap map=maps.us data=sample;
id state;
choro pop2010 / level=6;
format est2015 pop2010 comma12.;
run;
quit;

热力地图

PROC SGPLOT总结

PROC SGPLOT <*option(s)>;

STYLEATTRS </*option(s)>;

PLOT STATEMENT </*option(s)>;

XAXIS <*option(s)>;

X2AXIS <*option(s)>;

YAXIS <*option(s)>;

Y2AXIS <*option(s)>;

KEYLEGEND <“name-1” … “name-n”> </*option(s)>;

GRADLEGEND <“name”> </*option(s)>;

RUN;

SGPLOT and SGPANEL plot statements and selected options

syntax selected options
SCATTER scatter x=var y=var / options; datalabel=var Displays a label for each data point
SERIES series x=var y=var / options; break Creates a break in the line for each missing value
curvelabel Labels the series curve using the Y variable label
STEP step x=var y=var / options; break Creates a break in the line for each missing value
curvelabel Labels the series curve using the Y variable label
NEEDLE needle x=var y=var / options; baseline=val specifies a numeric value on the Y axis for the baseline
VECTOR vector x=var y=var / options; xorigin=val specifies Xcoordinate for origin either numeric value or numeric variable
yorigin=val specifies Ycoordinate for origin either numeric value or numeric variable
BUBBLE bubble x=var y=var size=var / options; fill specifies fill is visible
nofill specifies fill is not visible
outline specifies outline is visible
nooutline specifies outline is not visible
BAND band x=var upper=var lower=var / options; fill specifies fill is visible
nofill specifies fill is not visible
outline specifies outline is visible
nooutline specifies outline is not visible
HIGHLOW highlow x=var high=var lo=var / options; highcap=val specifies type of cap to use at end of bar or line
lowcap=val specifies type of cap to use at end of bar or line
type=val specifie how to draw glot with a: BAR or LINE(default)

图片属性控制

  • GPATH:存储位置
  • DPI:分辨率
  • WIDTH:宽
  • HEIGHT:高
  • OUTPUTFMT:格式
1
2
ods html style=ggStyle gpath='d:\StatsGraph' dpi=600;
ods graphics / width=14cm height=10cm outputfmt=jpg;

输出终端LISTING既支持EPS矢量图,也支持TIF位图。

1
2
3
4
5
6
7
8
9
ods listing gpath="D:\myGraph" dpi=300;
ods graphics on / imagename="eps" outputfmt=EPS; /*矢量图*/
绘图语句;
ods graphics on / imagename="tif" outputfmt=TIF; /*位图*/
绘图语句;
ods listing close;

PRINTER终端的优势是可以在一个语句里同时设置格式和分辨率,但劣势是绘制的图片仅仅是其输出的一部分区域。

1
2
3
4
5
6
7
ods printer printer=Postscript FILE="D:\eps.eps" dpi=300; /*矢量图*/
绘图语句
ods printer close;
ods printer printer=tiff FILE="D:\tif.tif" dpi=300; /*位图*/
绘图语句
ods printer close;