msgbartop
List for SAS fans and programmer
msgbarbottom

23 5月 20 雷达图及SAS绘图 by sxlion

雷达图,也叫网状图、蜘蛛网图、星图、极坐标图、Kiviat图、不规则多边图等,以二维图的形式显示多元数据。通常包括三个或多个定量变量,从同一点开始的轴上表示。轴的相对位置和角度通常是无意义的,不过通常用来揭示相关性、权衡(trade-offs)和比较等等。由坐标、刻度及参考线、多边形和数据点组成,图1。

radar chart

Fig.1.雷达图解析 (出自The Data Visualisation Catalogue)

在SAS第二代绘图g系列语句里,有专门的PROC gradar语句来完成。功能限制多,图形展示效果较差,想多点花样,必须用注释anno辅助才行。虽然到了SAS第三代绘图sg系列里面没有专门的雷达图语句了,但是SAS官方博客上倒是有几篇文章提到怎么用sg语句组合来绘制雷达图,要完成如图1那样的图不是很困难的事情。

            在前一篇文章《SAS程序优化_一万次循环》里面为了展示系统资源使用不均衡的情况,用到了雷达图(图2),表达了磁盘DISK io占用率高,限制了电脑发挥,属于trade-offs。其实这种情况,也可以用条形图展示,不过效果没雷达图好。

Fig.2. 电脑系统资源使用情况示意图

绘图要点:

1,由于不是规则的坐标图,即极坐标图,所以数据得转换,从XY坐标图转换到极坐标图,因此数据要完成角度弧度的转换;

2,只有一个极坐标轴了,坐标轴变成了辐条,可以用sgplot vector来完成;坐标轴上的刻度及参考线可以用polygon画多边形或ellipseparm画圆完成;数据点用scatter完成;数据点之间的连线用polygon多边形来完成;

3,还剩下一个坐标轴的命名,默认是datalabel,名称的位置受限,经常与部分刻度参考线重叠,非常难看,gradar也无法避免这个问题,除非借助anno,相当的难受,sgplot text就可以非常愉快的完成这个,做到美观大方。

代码组成部分一:作图数据

  • data ex;
  • do situation = 1 to 0 by –1;
  •  input cpu memory disk gpu network;output;
  •  end;
  • cards;
  • 20 20 90 10 10
  • 50 50 50 50 50
  • ;
  • run;
  • proc sort data=ex out=ex;by situation;run;
  • proc transpose data=ex out= ex2 name=config prefix= use ;
  • by situation;
  • run;

如果你的数据已经是图3这样了,就无需上面转换。

Fig.3. 期望的实际数据形式

代码组成部分二:构造极坐标图框架和数据,转换的数据形式见图4。

  • data ex3;
  •      set ex2;
  •        deg2Rad = constant(‘pi’)/180 ;
  •        deg   =(90360/5*(_N_-1)) ; /*  5由变量个数来决定   */
  •        angle = deg*deg2Rad ;
  •        rangle =  –360/5*(_N_-1)  ;/*  5由变量个数来决定   */
  •        rdx = use1*cos(angle) ;
  •        rdy = use1*sin(angle) ;
  •        rx = 100*cos(angle); ry=100*sin(angle);/*100由实际情况定 */
  •        config=upcase(config);
  •        if situation then situ_=”实际情况” ;else situ_=”理性情况”;
  • run;

Fig.4. 转换的实际数据和构图数据形式

代码组成部分三:作图

  • ods listing image_dpi=600 gpath=”d:”   ;
  • ods graphics on  /  imagename=”Figure_”  HEIGHT= 7 cm WIDTH= 7 cm border=no ;
  • footnote;
  • title;
  • proc sgplot data=ex3  ASPECT=1  noborder  SUBPIXEL;
  • STYLEATTRS DATACONTRASTCOLORS=(blue red);
  •     polygon x=rdx y=rdy id=situation/ group=situ_ outline LINEATTRS=(pattern=solid color=blue THICKNESS=2) fill fillattrs=(transparency=0.) name=”sxlion”;
  •       vector  x=rx y=ry / xOrigin=0 yOrigin=0  NOARROWHEADS LINEATTRS=(pattern=solid color=black THICKNESS=1.5) ;
  •       text x=rx y=ry text=config / ROTATE=rangle position=top textattrs= (Color=darkblue Family=”Helvetica” Size=10 Weight=Bold);
  •       ellipseparm SEMIMAJOR=50 SEMIMINOR=50;/*中刻度线,自定*/
  •       ellipseparm SEMIMAJOR=99 SEMIMINOR=99;/*外刻度线,自定*/
  •       scatter x=rdx y=rdy /markerattrs=(symbol=circlefilled color=red Size=6);
  • keylegend  “sxlion” / noborder;
  • xaxis DISPLAY=none;
  • yaxis DISPLAY=none;
  • run;
  • ods graphics off;

SAS绘图sg系列语句可以模块化,多个功能叠加在一起就可以组成一个雷达图了。当然,既然是组合,只要兼容的sg系列语句都可以叠加在一起,并且按语句出现的先后顺序叠加起来,语句的前后顺序可根据需要进行安排。

原创文章: ”雷达图及SAS绘图 by sxlion“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/475

28 9月 15 SAS绘图即学即用系列连载4.2-面图


SAS绘图即学即用系列连载4.2 –面积图: 以下代码 可以拷贝到SAS编辑器中,直接使用;稍作更改便可得到自己满意的图形。以下来自一本关于SAS绘图的书稿(未出版草稿),均为本人原创。 完整代码详见SAS资源资讯列表  www.saslist.net

4.2  面图

4.2.1 面积图

使用PATTERN=改变面积填充区的属性。

sample421

1
2
3
4
5
6
7
8
9
10
FILENAME file "d:\SAS_charts\sample421.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol value=none interpol=j ; /* 设置点属性 */
pattern1 c=orange;
proc gplot data=sashelp.stocks;
plot high*date /areas=1;
where stock="IBM" and ('01feb90'd <= date <= '01dec92'd);
run;
quit;

4.2.2 点面

粗边面积图

 

sample420

1
2
3
4
5
6
7
8
9
10
FILENAME file "d:\SAS_charts\sample422.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=j width=3 Color=red; /* 设置点属性 */
pattern1 c=orange;
proc gplot data=sashelp.stocks;
plot high*date high*date=1 /overlay areas=1 ;
where stock="IBM" and ('01feb90'd <= date <= '01dec92'd);
run;
quit;

4.2.3 分组面积图

sample422

1
2
3
4
5
6
7
FILENAME file "d:\SAS_charts\sample423.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=j c=blue; /* 设置点属性 */
symbol2 value=none interpol=j c=red; /* 设置点属性 */
pattern1 c=blue;
pattern2 c=red;

proc gplot data=sashelp.stocks;
plot high*date=stock / areas=2 ;
where stock NE “IBM” and (’01feb90’d <= date <= ’01dec92’d);
run;
quit;

4.2.4 区域面积图 (高低区域)

sample423

1
2
3
4
5
6
7
8
9
10
11
12
FILENAME file "d:\SAS_charts\sample424.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=j ; /* 设置点属性 */
symbol2 value=none interpol=j ; /* 设置点属性 */
pattern1 c=white;
pattern2 c=orange;
proc gplot data=sashelp.stocks;
plot low*date high*date /overlay areas=2 ;
where stock="IBM" and ('01feb90'd &lt;= date &lt;= '01dec92'd);
run;
quit;

4.2.5  其他

调整和修饰:点标记、参考线、修饰坐标轴

sample425

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FILENAME file "d:\SAS_charts\sample425.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=12cm vsize=8cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=j c=gray; /* 设置点属性 */
symbol2 value=none interpol=j c=orange; /* 设置点属性 */
symbol3 value=none interpol=j c=red w=2;
pattern1 c=gray;
pattern2 c=orange;
axis1 order= ('01jan86'd to '01jan06'd by 1461) LABEL=( "Period") minor=none ; /*调整坐标轴的显示、改变轴标签内容*/
axis2 order= (0 to 250 by 50) LABEL=(angle=90 "") minor=none offset=(,0.4cm); /*调整坐标轴的显示、改变轴标签内容和位置*/
legend1 label=none
position=(top right inside) mode=share;
Title H=0.4cm font="Thorndale AMT/bold" "IBM's stock from '01JAN86' to '01JAN06' ";
Footnote justify=left "Data resource: sashelp.stocks" ;
proc gplot data=sashelp.stocks;
plot low*date high*date close*date=3 /overlay areas=2
haxis=axis1 vaxis=axis2
vref=50 to 200 by 50 lvref=1 CVREF=black WVREF=1
legend=legend1;
where stock="IBM" ;
run;
quit;

原创文章: ”SAS绘图即学即用系列连载4.2-面图“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/420


17 8月 15 SAS绘图即学即用系列连载4.1-线图


by sxlion

 SAS绘图即学即用系列连载4.1 –曲线图: 以下代码 可以拷贝到SAS编辑器中,直接使用;稍作更改便可得到自己满意的图形。以下来自一本关于SAS绘图的书稿(未出版草稿),均为本人原创。 完整代码详见SAS资源资讯列表  www.saslist.net

4.1  线图

4.11 曲线图

sample411

1
2
3
4
5
6
7
8
9
FILENAME file "d:\SAS_charts\sample411.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol value=none interpol=j CI=orange width=3; /* 设置线点属性 */
proc gplot data=sashelp.stocks;
plot high*date;
where stock="IBM" and ('01feb90'd &lt;= date &lt;= '01feb91'd);
run;
quit;

4.12 分组曲线图

1
2
3
4
5
6
7
8
9
10
11
FILENAME file "d:\SAS_charts\sample413.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=8cm vsize=6cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=join CI=red width=2;
symbol2 value=none interpol=join CI=blue width=2;
symbol3 value=none interpol=join CI=orange width=2;
proc gplot data=sashelp.stocks;
plot high*date=stock;
where ('01feb90'd &lt; date &lt; '01feb91'd);
run;
quit;

 

4.13 双/多曲线图

sample414

1
2
3
4
5
6
7
8
9
10
11
FILENAME file "d:\SAS_charts\sample414.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=10cm vsize=8cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=join CI=red L=2 width=1; /*L:设置线型 */
symbol2 value=none interpol=join CI=orange L=1 width=2;
symbol3 value=none interpol=join CI=green L=3 width=1;
proc gplot data=sashelp.stocks;
plot high*date close *date low*date /overlay ;
where stock="IBM" and ('01feb90'd &lt; date &lt; '01feb91'd);
run;
quit;

4.14 双坐标曲线图

sample415

1
2
3
4
5
6
7
8
9
10
11
FILENAME file "d:\SAS_charts\sample415.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=10cm vsize=8cm ; /* 设置绘图区域大小 */
symbol value=none interpol=j CI=red width=1; /* 设置线属性 */
symbol2 value=none interpol=j CI=black width=1; /* 设置点属性 */
proc gplot data=sashelp.stocks;
plot high*date/vzero;
plot2 volume*date;
where stock="IBM" and ('01feb90'd &lt;= date &lt;= '01feb91'd);
run;
quit;

4.15  其他修饰: 

参考线、图例、坐标轴、标题、脚注

sample416

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FILENAME file "d:\SAS_charts\sample416.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=12cm vsize=8cm ; /* 设置绘图区域大小 */
symbol1 value=none interpol=join CI=red width=2;/* 设置点属性 */
symbol2 value=none interpol=join CI=orange width=2;
symbol3 value=none interpol=join CI=green width=2;
axis1 order= ('01jan86'd to '01jan06'd by 1461) LABEL=( "Period") minor=none offset=(0.2 cm); /*调整坐标轴的显示、改变轴标签内容*/
axis2 order= (0 to 250 by 50) LABEL=(angle=90 "") major=none minor=none; /*调整坐标轴的显示、改变轴标签内容和位置*/
legend1 label=none
position=(top right inside)
mode=share;
Title H=0.4cm "Three company's stock from '01JAN86' to '01JAN06' ";
Footnote justify=left "Data resource: sashelp.stocks" ;
proc gplot data=sashelp.stocks;
plot close*date=stock /
haxis=axis1 vaxis=axis2
vref=50 to 200 by 50 lvref=1 CVREF=black WVREF=1
legend=legend1 ;
run;
quit;

原创文章: ”SAS绘图即学即用系列连载4.1-线图“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/409


05 8月 15 SAS绘图即学即用系列连载4.0-点图


by sxlion

 SAS绘图即学即用系列连载4.0–点图: 以下代码 可以拷贝到SAS编辑器中,直接使用;稍作更改便可得到自己满意的图形。以下来自一本关于SAS绘图的书稿(未出版草稿),均为本人原创。 完整代码详见SAS资源资讯列表  www.saslist.net

4.0  点图

4.01 散点图

也可使用SYMBOL全局选项来改变点的属性。

sample401

1
2
3
4
5
6
7
8
FILENAME file "d:\SAS_charts\sample401.png";
goptions reset=all device=png gsfname=file/*设置图片格式和存放点*/
hsize=10cm vsize=8cm ; /* 设置绘图区域大小 */
symbol color=black value=dot ; /* 设置点属性 */
proc gplot data=sashelp.class;
plot weight*height/ vzero;
run;
quit;
4.02  分组散点图
sample402
1
2
3
4
5
6
7
8
9
FILENAME file "d:\SAS_charts\sample402.png";
goptions reset=all device=png gsfname=file
hsize=8cm vsize=8cm ; /* 设置绘图区域大小   */
symbol1 color=blue value=square  ;    /* 设置各分组数据散点的属性 */
symbol2 color=red value=squarefilled   ;
proc gplot data=sashelp.class;
plot weight*height=sex/vzero;  /* 使用绘图程序必须语句和选项*/
run;
quit;
4.03 双坐标轴 散点图

sample403

1
2
3
4
5
6
7
8
9
10
FILENAME file "d:\SAS_charts\sample403.png";
goptions reset=all device=png gsfname=file
hsize=12cm vsize=8cm ; /* 设置绘图区域大小 */
symbol1 color=blue value=squarefilled ; /* 设置各分组数据散点的属性 */
symbol2 color=black value=dot ;
proc gplot data=sashelp.class;
plot weight*age /vzero; /* 使用绘图程序必须语句和选项*/
plot2 height*age /vzero; /* 使用绘图程序必须语句和选项*/
run;
quit;
4.04   象限图 其他调整和修饰:点标记、参考线、修饰坐标轴、 标题 脚注

标记数据点和参考线

sample404

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FILENAME file "d:\SAS_charts\sample404.png";
goptions reset=all device=png gsfname=file
hsize=10cm vsize=10cm ; /* 设置绘图区域大小 */
symbol1 color=orange value=dot H=2 POINTLABEL=("#name" JUSTIFY=center) ; /* 设置数据点的属性 */
axis1 order= (50 to 74 by 12) LABEL=( "身高/英寸") major=none minor=none; /*调整坐标轴的显示、改变轴标签内容*/
axis2 order= (40 to 140 by 50) LABEL=(angle=90 "体重/磅") major=none minor=none; /*调整坐标轴的显示、改变轴标签内容和位置*/
Title H=0.5cm font="MingLiU" "班级男生身高分布图" ;
Footnote justify=left "Data resource: sashelp.class" ;
proc gplot data=sashelp.class;
plot weight*height /
haxis = axis1 /*指定横坐标设置为前面全局设置坐标axis1*/
vaxis =axis2 /*指定纵坐标设置为前面全局设置坐标axis2*/
href = 62 chref=black /* 增加参考线*/
vref = 90 cvref=black;
where sex="男" ;
run;
quit;

原创文章: ”SAS绘图即学即用系列连载4.0-点图“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/403


16 5月 12 SAS转置技巧 — 辅助变量


有时候数据分析的时候,总是需要把数据颠来倒去,从不同的角度分析N遍,SAS不但提供彪悍的统计分析程序,还提供了整理数据的辅助语句,每次都能把数据整理有条有理的。众所周知,SAS在清洗整理数据方面(ETL)的能力强大无比。很多SASor在垂涎和试用R语言提供新奇的分析和绘图模块时,不忘了先在SAS里面把数据整得服服帖帖的。

下面把自己遇到几个不那么常规的矩阵转置收集一下,它们都用到了增加辅助变量这一小技巧,尽管简单,其实都非常实用。

例1, 最近遇到一个需要对数据集进行操作的小问题,在SAS帮助proc transpose里面没找到例子,数据形式如下:

数据如下 (更多…)

原创文章: ”SAS转置技巧 — 辅助变量“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/255


07 4月 12 世界-亚洲-中国省市县各级地图列表 by sxlion


Map charting, so easy ! 以后再也不担心画地图了。

图1,世界地图 (去掉南极)

美国版以大西洋为中心

图2,世界地图 (去掉南极)

中国版 以太平洋为中心

 

图3, 亚洲地图

 

图4,中国地图

(更多…)

原创文章: ”世界-亚洲-中国省市县各级地图列表 by sxlion“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/235


18 4月 11 创建SAS宏变量的几类方法及举例


SAS里面除了变量,还有宏变量,其用途也非常广泛。创建宏变量的方法最早有shiyiming总结,翻了翻Rick Aster的Professional SAS Programming Shortcuts – Over 1,000 Ways To Improve Your SAS Programs,发现里面并没有总结这个问题,有点失望。

这里转载并补充姚志勇的SAS书里面的内容,使得更加完整和充实,便于大家以后方便选择使用,一共有四类方法:

(更多…)

原创文章: ”创建SAS宏变量的几类方法及举例“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/122


20 9月 10 SAS数据集操作常见问题


1,怎么新建一个空数据集,即新建一个有数据结构但是没有值的数据集

2,怎么删掉一个数据集

3,怎么去掉一个数据集中有重复的记录或观察值

4,怎么得到一个数据集的所有观察值或记录的条数/个数

5,怎么对一个数据集按一个或几个变量进行排序

以上5个问题,每个问题,请给出10个或以上的不同的SAS代码来解决。

原创文章: ”SAS数据集操作常见问题“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/76