sas - 如何编写一个为每个独特的人创建图表的 Do-Loop?
问题描述
我正在尝试遍历一个大型数据集并为每个人创建一个简单的散点图。我想使用 do 循环和 proc sgplot 在 SAS 中运行它。
我的数据集如下:
Person Date QTY Brand
Jim | August 2015 | 20 | Pepsi
Jim | AUgust 2015 | 20 | Coke
Jim | October 2016 | 30 | Pepsi
Jim | November 2016 | 40 | Sprit
Susan | Sept. 2015 | 20 | Dr.Pepper
Susan | Dec. 2016 | 10 | Sprit
Helen | Jan. 2016 | 20 | Coke
Helen | Feb.2016 | 30 | Pepsi
有许多不同的人(n = 100)。我想为每个独特的人创建一个散点图,在 x 轴上显示日期,在 y 轴上显示数量。然后我想要按品牌分组的积分。
目前我的代码是:
%do i =1 to count(distinct(Person));
proc sgplot data= Original (where=(count = 4))
scatter x=Date y=QTY/ group = Brand;
run;
end;
有什么建议么?
解决方案
在 SAS 中,为每个概念做某事通常是通过BY
语句来服务的。Proc 将执行您期望的操作,并根据 by 变量的不同值自动处理数据组!
此示例演示如何将by
变量值放置在绘图标题 ( #byval1
) 中,以及抑制nobyline
将 person= name显示为子标题的默认署名 ( )。BY PERSON
带有可选参数的语句NOTSORTED
意味着组的行将由连续值邻接按行by
形成,即使数据未按 排序,也允许处理工作而不会出错Person
。为了更安全的操作,请先对 by 变量设置的数据进行预排序或索引。
data have; infile datalines dlm='|';
input
Person $ Date: date11. QTY Brand $;
format date date9.;
datalines;
Jim | 01-Aug-2015 | 20 | Pepsi
Jim | 01-Aug-2015 | 20 | Coke
Jim | 01-Oct-2016 | 30 | Pepsi
Jim | 01-Nov-2016 | 40 | Sprit
Susan | 01-Sep-2015 | 20 | Dr.Pepper
Susan | 01-Dec-2016 | 10 | Sprit
Helen | 01-Jan-2016 | 20 | Coke
Helen | 01-Feb-2016 | 30 | Pepsi
run;
title "Scatter for #BYVAL1";
options nobyline;
proc sgplot data=have;
by person notsorted;
scatter x=date y=qty / group = brand;
xaxis interval=month;
format date monyy7.;
run;
options byline;
title;
人员Jim
Susan
Helen
没有按排序顺序,因此如果不选择该NOTSORTED
选项,则会出现错误消息并且可能会出现一些不完整的输出。
推荐阅读
- python - 为 python 应用程序创建一个 Windows 安装程序(转换为 .exe),在所需目录中创建快捷方式
- javascript - 打开多个 URL 时如何删除浏览器弹出窗口阻止程序
- typescript - 是否可以开玩笑地模拟从模块内部调用的函数?
- powershell - Where-Object 在所有先决条件上从左到右匹配?
- reactjs - 如何在反应 js 中捕获 net::ERR_CONNECTION_TIMED_OUT?
- javascript - iconv 解码流中遇到的特殊字符
- css - 如何使用css变换构建45度倒梯形?
- jira - 附在 Jira rest API 上的 webm 格式不在问题附件中预览
- reactjs - 拖动 tomkp/react-split-pane 的调整大小后无法设置 defaultSize
- node.js - CERT_HAS_EXPIRED - 在从节点 js 到 php 的 post 请求中