- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算按另一列分组的累积最大值。
假设我有这些数据:
data have;
input grp $ number;
datalines;
a 3
b 4
a 5
b 2
a 1
b 8
;
我想要的输出是:
data want;
input grp $ cummax;
a 3
b 4
a 5
b 4
a 5
b 8
;
我的真实案例将涉及多个分组列+过滤器,理想情况下,该累积最大值将同时在多个列上计算。
我主要关心的是计算效率,因为我将在十到数亿行的表上运行它。 Proc SQL 或 native SAS 都受欢迎。
如有必要,行可能会被打乱。
系统信息
proc product_status;run;
For Base SAS Software ...
Custom version information: 9.3_M2
Image version information: 9.03.01M2P080112
For SAS/STAT ...
Custom version information: 12.1
Image version information: 9.03.01M0P081512
For SAS/GRAPH ...
Custom version information: 9.3_M2
For SAS/CONNECT ...
Custom version information: 9.3_M2
For SAS OLAP Server ...
Custom version information: 9.3_M1
For SAS Enterprise Miner ...
Custom version information: 12.1
Image version information: 9.03.01M0P081512
For SAS Integration Technologies ...
Custom version information: 9.3_M2
For SAS/ACCESS Interface to Oracle ...
Custom version information: 9.3_M1
For SAS/ACCESS Interface to PC Files ...
Custom version information: 9.3_M2
proc setinit;run;
Product expiration dates:
---Base SAS Software 31JUL2018
---SAS/STAT 31JUL2018
---SAS/GRAPH 31JUL2018
---SAS/CONNECT 31JUL2018
---SAS OLAP Server 31JUL2018
---SAS Enterprise Miner 31JUL2018
---MDDB Server common products 31JUL2018
---SAS Integration Technologies 31JUL2018
---SAS Enterprise Miner Server 31JUL2018
---SAS Enterprise Miner Client 31JUL2018
---Unused OLAP Slot 31JUL2018
---SAS Enterprise Guide 31JUL2018
---SAS/ACCESS Interface to Oracle 31JUL2018
---SAS/ACCESS Interface to PC Files 31JUL2018
---SAS Metadata Bridges for Informatica 31JUL2018
---SAS Metadata Bridges for Microsoft SQL Server 31JUL2018
---SAS Metadata Bridge for Oracle 31JUL2018
---SAS Workspace Server for Local Access 31JUL2018
---SAS Workspace Server for Enterprise Access 31JUL2018
---SAS Table Server 31JUL2018
---DataFlux Trans DB Driver 31JUL2018
---SAS Framework Data Server 31JUL2018
---SAS Add-in for Microsoft Excel 31JUL2018
---SAS Add-in for Microsoft Outlook 31JUL2018
---SAS Add-in for Microsoft PowerPoint 31JUL2018
---SAS Add-in for Microsoft Word 31JUL2018
最佳答案
使用HASH
对象来存储每个变量和组组合的最大值。这将允许您单次遍历数据集并编写一些可以根据组和变量数量进行扩展的代码。
这不需要对大型数据集进行昂贵的排序。
测试数据
data example;
format grp1-grp5 $1.;
array grp[5];
array val[5];
do rows=1 to 1000000;
do i=1 to 5;
r = ceil(ranuni(1)*5);
grp[i] = substr("ABCDE",r,1);
end;
do j=1 to 5;
val[j] = 10*rannor(1);
end;
output;
end;
keep grp: val:;
run;
计算累积最大值的数据步骤
data want;
set example;
array val[5];
array max[5];
if _n_ = 1 then do;
declare hash mx();
rc = mx.defineKey('grp1','grp2','grp3','grp4','grp5');
rc = mx.definedata('max1','max2','max3','max4','max5');
rc = mx.definedone();
end;
rc = mx.find();
/*No Max for this combination -- add it*/
if rc then do;
do i=1 to 5;
max[i] = val[i];
end;
end;
/*Update Max Values*/
do i=1 to 5;
if val[i] > max[i] then
max[i] = val[i];
end;
/*Update Hash*/
rc = mx.replace();
drop rc i;
n = _n_; /*This is for testing*/
run;
使用测试变量n
,我们可以对保持原始顺序的组进行排序,看看它是否有效。 (提示,确实如此)。
proc sort data=want;
by grp: n;
run;
关于sas - SAS 或 PROC SQL 中按组的累积最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48648946/
美好的一天! 我正在制作一个出勤检查程序,单击一次时显示橙色按钮,单击两次时显示红色按钮,单击 3 次时显示黑色按钮。我在如何累积 getClickCount() 值方面遇到问题,因为对于按钮要注册
我似乎无法在 Adobe 网站上找到明确的答案。使用 ColdFusion 10,11 甚至 2016,更新(修补程序)是否累积? 例如,ColdFusion 的修补程序高达 hotfix_023
我是随机森林新手,我有一个关于回归的问题。我正在使用 R 包 randomForests 来计算 RF 模型。 我的最终目标是选择对预测连续性状很重要的变量集,因此我正在计算一个模型,然后删除准确度平
目前我们有一个发布/消费者服务,消费者将收到的消息写入 AWS S3。我们目前每月编写超过 100.000.000 个对象。但是,我们可以根据一些规则对这些消息进行分组,以节省一些钱。这些规则可以是这
假设我有一个二叉树: data BinTree a = Nil | Branch a (BinTree a) (BinTree a) 我想在这样的结构上做一个累积映射: mapAccum ::
我正在使用内核估计,我应用了 density函数从 R 到我的数据文件(双变量),经过几次统计处理后,我需要转换这些数据,这就是我的问题: 是否有非参数方法的逆累积分布函数? 我尝试过 Google、
不确定以前是否有人问过这个问题,尝试搜索它但找不到任何相关内容。 我试图获得一个累积的字符串聚合,即仅运行不同值的聚合。这是我正在寻找的结果的示例。 我尝试使用 string_agg 函数,但它仅在用
我想找到累积的 bind.rows。这是我想要实现的小例子。我将使用 dslabs 包中的 gapminder 数据集进行演示。 library(tidyverse) library(dslabs)
在 Linux 中使用 tomcat 进程时,我们观察到时间字段显示5506:34(累积 CPU 时间)。在探索时,这是在进程的整个生命周期中运行所花费的 CPU 时间的百分比。 由于这是一个 Jav
我有一些数据可以使用 pyparsing 中的 OneorMore 函数进行解析。比如, fun = OneorMore( foo.setResultsName("foo") + bar.setRe
我试图弄清楚是否有一种简单的方法可以解决 pandas 的以下问题。假设我有四个容器,A、B、C、D,每个容器都有特定的体积。假设我现在得到了一定量的液体,我想用它来填充这些容器。我怎样才能想出一个“
我正在尝试编写一个函数来检测所有上升沿 - 向量中值超过特定阈值的索引。这里描述了类似的东西:Python rising/falling edge oscilloscope-like trigger
这个问题在这里已经有了答案: Multiplying elements of a column in skipping an element after each iteration (3 个答案)
有没有办法获取数据框中每一行的值计数? |f1|f2| ------- v1 | a value_counts -> {a:1} v2 | a value_counts -> {a:2} v3 |
我目前正在尝试对我正在构建的计算器(使用复合模式)进行测试。第一种方法应该添加 75 美元,效果很好,但是当第二种方法运行时,“服务”被重置并且有0 美元作为工作成本。如果我将这两种方法合二为一,那么
我有一个如下所示的文档: 数据.txt 100, "some text" 101, "more text" 102, "even more text" 我使用正则表达式处理它并返回一个新的处理文档,如
假设我有这个: function getAllPromises(key: string, val: any): Promise { const subDeps = someHash[key]; c
我在 mysql 中有表“cumul_sum”,我想根据条件划分“cumulative”列,即如果此列中的值 >= 70,则这些值应存储在名为“others”的新列中"并且前面应该存放对应的sku_i
我正在做一个用 C++ 刺激 ATM 的项目,但在使用累加器时遇到了一些问题,我的问题是:我正在使用开关(这里是情况 1)来更改在包含的函数中声明的 2 个变量的值switch(),但是值只在情况 1
我希望能够使用 accumulate 对 vector 中的每隔一对元素进行累加。我尝试了以下但没有成功,为非空、非零 vector 返回错误 return std::accumulate(vec.b
我是一名优秀的程序员,十分优秀!