SAS可视化高级ODS图形:PROC SGPLOT,BY组和SG注释

简介: SAS可视化高级ODS图形:PROC SGPLOT,BY组和SG注释

在我们开始之前,让我们更好地了解当您运行PROC SGPLOT以及BY语句和SG注释数据集时会发生什么。

这个例子为每个通过Sex运行PROC SGPLOT生成的图形添加了一个注释。


proc sort data=sashelp.class out=c;

  by sex;

run;



data anno1;

  retain x1 20 y1 85 function 'Text' dataspace 'GraphPercent' width 100;

  label = 'Students'; output;

run;



proc sgplot data=c sganno=anno1 tmplout='tmp1.tmp';

  scatter y=weight x=height;

  by sex;

run;
 
 

不需要TMPLOUT =选项。但是,它显示了PROC SGPLOT编写的用于制作图形的模板。如果您真的想了解PROC SGPLOT的作用,需要了解模板。它存储在文件tmp1.tmp中,如下所示。

proc template;

  define statgraph sgplot;

      dynamic __BYLINE__;

      begingraph / collation=binary;

        EntryTitle __BYLINE__ / textattrs=(size=GraphLabelText:fontsize);

        layout overlay / yaxisopts=(labelFitPolicy=Split)

                          y2axisopts=(labelFitPolicy=Split);

            ScatterPlot X=Height Y=Weight / subpixel=off primary=true

                      LegendLabel="Weight" NAME="SCATTER";

            DrawText  "Students" / X=20 Y=85 WIDTH=100;

        endlayout;

      endgraph;

  end;

run;
 

出于我们的目的,我想指出的是DRAWTEXT语句。它提供了注释。虽然PROC SGRENDER接受SGANNO =数据集,但不是这个图形的创建方式。相反,PROC SGPLOT读取SG注释数据集并将每一行转换为GTL DRAW语句。

 

现在考虑SG注释数据集,其具有与DATA =数据集中的BY变量匹配的BY变量。

data anno2;

  x1 = 20; y1 = 85; function = 'Text'; dataspace = 'GraphPercent'; width = 100;

  label = 'Female Students'; Sex = 'F'; output;

  label = 'Male Students';  Sex = 'M'; output;

run;

如果使用BY语句和SGANNO =选项运行PROC SGPLOT,则在两个图中都会同时获得两个注释。

proc sgplot data=c sganno=anno2 tmplout='tmp2.tmp';

  scatter y=weight x=height;

  by sex;

run;

这是文件tmp2.tmp,其中包含生成的GTL:

proc template;

  define statgraph sgplot;

      dynamic __BYLINE__;

      begingraph / collation=binary;

        EntryTitle __BYLINE__ / textattrs=(size=GraphLabelText:fontsize);

        layout overlay / yaxisopts=(labelFitPolicy=Split)

                          y2axisopts=(labelFitPolicy=Split);

            ScatterPlot X=Height Y=Weight / subpixel=off primary=true

                        LegendLabel="Weight" NAME="SCATTER";

            DrawText  "Female Students" / X=20 Y=85 WIDTH=100;

            DrawText  "Male Students" / X=20 Y=85 WIDTH=100;

        endlayout;

      endgraph;

  end;

run;
 

现在有两个DRAWTEXT语句。两者都是无条件使用的。因此,如果我们想在每个图中使用不同的注释,我们必须以其他方式处理这个问题。如果要为每个图形添加不同的文本,则不需要SG注释。可以修改输入数据集并在PROC SGPLOT中使用TEXT语句。

 


data c2;

  set c;

  by sex;

  if first.sex and sex eq 'F' then do;

      x1 = 51;  y1 = 104; Label = 'Female';

      end;

  else if first.sex and sex eq 'M' then do;

      x1 = 56;  y1 = 140; Label = 'Male';

      end;

  else call missing(label,x1,y1);

run;



proc sgplot data=c2;

  scatter y=weight x=height;

  text y=y1 x=x1 text=label;

  by sex;

run;
 

使用这种方法以及TEXT和POLYGON语句可以做很多事情,而不需要SG注释。尽管如此,SG注释非常有用,与TEXT和POLYGON语句不同,它为您提供了各种坐标系。

接下来,我们将创建一个SG注释数据集以及一个ID变量(名为ID),其值与BY变量Sex相匹配。


data anno3;

  x1 = 20; y1 = 85; function = 'Text'; dataspace = 'GraphPercent'; width = 100;

  label = 'Female Students'; id = 'F'; output;

  label = 'Male Students';  id = 'M'; output;

run;

现在,PROC SGPLOT仅用于将模板写入文件tmp3.tmp。


proc sgplot data=c tmplout='tmp3.tmp';

  ods exclude sgplot;

  scatter y=weight x=height;

  by sex;

run;

这是文件。

 proc template;

define statgraph sgplot;

dynamic __BYLINE__;

begingraph / collation=binary;

EntryTitle __BYLINE__ / textattrs=(size=GraphLabelText:fontsize);

layout overlay / yaxisopts=(labelFitPolicy=Split) y2axisopts=(labelFitPolicy=Split);

  ScatterPlot X=Height Y=Weight / subpixel=off primary=true LegendLabel="Weight" NAME="SCATTER";

endlayout;

endgraph;

end;

run;

可以使用DATA步骤编辑此模板并将其提交给SAS。下面的语句添加了一个PROC TEMPLATE语句,将模板名称从sgplot更改为by,并添加动态变量和ANNOTATE语句。

 


data _null_;

  infile 'tmp3.tmp';

  input;

  if _n_ eq 1 then call execute('proc template;');

  _infile_ = tranwrd(_infile_, 'sgplot;', 'by;');

  call execute(_infile_);

  if find(_infile_, 'layout overlay') then

      call execute('dynamic _byval_; annotate / id=_byval_;');

run;

可以提交以下语句以查看已编辑的模板。

 

接下来显示编译的模板。


proc template; source by; quit;


 define statgraph By;

  dynamic __BYLINE__ _byval_;

  begingraph / collation=binary;

      EntryTitle __BYLINE__ / textattrs=(size=GraphLabelText:fontsize);

      layout overlay / yaxisopts=(labelFitPolicy=Split) y2axisopts=(

        labelFitPolicy=Split);

        annotate / id=_BYVAL_;

        ScatterPlot X=HEIGHT Y=WEIGHT / subpixel=off primary=true LegendLabel=

            "Weight" NAME="SCATTER";

      endlayout;

  endgraph;

end;

请注意,编译的模板与原始模板不完全匹配。特别是,DYNAMIC语句被组合在一起。使用PROC TEMPLATE查看模板的一个好处是模板很好地缩进。

 

请注意,动态变量_byval_与ID =值匹配。

现在,可以使用PROC SGRENDER以及SGANNO =选项和BY语句来为每个图形获取单独的注释。


title;

options nobyline;

proc sgrender data=c template=by sganno=anno3; by sex; run;

options byline;
 

替代方法要求您使用GTL编写图形模板,然后使用PROC SGRENDER。虽然这种PROC SGPLOT方法有更多步骤,但它更容易。在PROC SGPLOT中指定如何构建图形比从头开始编写模板更容易。将需要一个DATA步骤来修改该模板,但这并不难,因为可以简单地复制我的代码。修改模板的DATA步骤中没有特定于此示例的内容。

相关文章
|
Web App开发 搜索推荐 安全
免费、好用、强大的开源笔记软件综合评测
笔记产品那么多,为什么要使用开源笔记软件? 开源笔记软件的优点和缺 优点 • 免费使用; • 可扩展性强,满足用户的个性化需求; • 数据更加安全,不用担心开发者突然跑路; 缺点 • 用户最好具备一定的技术,有些功能的使用可能需要用户自 下面是一些比较著名的开源笔记软件。绝大多数开源软件都是针对某款知名笔记软件的替代品,比如印象笔记/EverNote、Roam Research、Notion 等笔记软件的替代品。 具体包括,Joplin、 Turtle、 Laverna、 Boostnote、 Anytype、 Focalboard、 TiddlyWiki 、 Athens、 Trilium.
3128 0
免费、好用、强大的开源笔记软件综合评测
|
Windows
万能脚本录制器(支持鼠标/键盘的前台和后台,支持多种绑定模式)
一款模拟鼠标键盘动作的软件。通过制作脚本,可以代替双手,自动执行一系列鼠标键盘动作。本程序简单易用,不需要任何编程知识就可以作出功能强大的脚本。只要在电脑前用双手可以完成的动作,本程序都可以替代完成。
16884 0
万能脚本录制器(支持鼠标/键盘的前台和后台,支持多种绑定模式)
|
Unix 编译器 iOS开发
Zig 环境安装
Zig 环境安装
421 2
Zig 环境安装
|
机器人 网络安全 数据安全/隐私保护
autMan奥特曼机器人-对接Docker版本NTQQ详细教程
本文介绍了如何在服务器上搭建NTQQ机器人,通过官方NTQQ对接各框架,实现QQ登录的稳定运行。文章提到了需要准备一台服务器和相应的软件,并详细描述了通过SSH链接服务器、创建文件夹和配置文件、编辑配置文件地址端口、运行容器等步骤。同时,文章还介绍了VNC连接的使用和配置,以及使用watchtower进行NTQQ的更新。文章总结起来就是在服务器上搭建NTQQ机器人,实现QQ登录的稳定性和自动登录功能,同时提供了更新和维护的方法。
974 3
autMan奥特曼机器人-对接Docker版本NTQQ详细教程
|
Ubuntu
Ubuntu :relocation R_X86_64_32 against `.rodata‘ can not be used when making a PIE object;
Ubuntu :relocation R_X86_64_32 against `.rodata‘ can not be used when making a PIE object;
3347 0
Ubuntu :relocation R_X86_64_32 against `.rodata‘ can not be used when making a PIE object;
|
12月前
|
机器学习/深度学习 人工智能 调度
高效评估多模态预训练对齐质量,中科大提出模态融合率MIR
中国科学技术大学研究团队提出了一种新的评估指标——模态融合率(MIR),用于评估多模态预训练模型的对齐质量。MIR通过衡量不同模态之间的分布距离,有效反映了模型的对齐质量,并在多种训练配置下表现出良好的鲁棒性和通用性。实验结果表明,MIR能够准确评估训练数据选择、训练策略调度和模型架构设计对预训练结果的影响,为多模态学习提供了可靠的方法。
427 22
|
机器学习/深度学习 存储 算法
机器学习之聚类——双聚类简介及简单案例
机器学习之聚类——双聚类简介及简单案例
241 0
|
数据采集 编解码 数据挖掘
使用Python进行多次降采样技术
使用Python进行多次降采样技术
440 1
|
数据可视化 API 数据库
R包:disgenet2r|DisGeNET的懒癌福利,一行代码多种可视化
DisGeNET是整合基因-疾病关联数据的综合数据库,用于生物医学研究。disgenet2r是R包,方便访问DisGeNET数据,支持查询、检索和分析。最新版包含超百万基因-疾病关联。安装包时若遇到网络问题,可从GitHub下载源代码手动加载。常用功能包括检索单一疾病相关基因、多疾病联合分析及疾病富集。该包简化了数据获取和初步分析,适合初学者,但可视化定制性有限。
616 1
|
安全 网络安全 数据安全/隐私保护
ssh连接时提示THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED
ssh链接云主机: ssh root@123.59.xx.xx 报错:THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED   解决办法: ssh -o StrictHostKeyChecking=no root@123.59.xx.xx 输入密码,链接成功   与ssh中Host key verification failed问题一样。
4786 0