我有一个 8 列形式的数据集(根据与此处不直接相关的其他变量进行分隔),其大小每周都有变化,每个数据点都是从 0 到 100(含)的有效随机正整数。
我正在尝试设计一个函数来输出总和至少占列总和 50% 的最小数据点数 - 因此,如果某列恰好是整数 0-100,则总和将是 5050,所需输出将是 30。此外,由于我需要重复此函数 8 次,因此我需要一个紧凑的解决方案 - 除了处理可变数据大小之外。
到目前为止,我已经尝试了各种 SUMIF 和 COUNTIF,但尝试使用 LARGE 函数设置范围时,出现了递归并弹出错误消息。一开始,我也尝试了一些迭代解决方案 - 例如,使用总和除以最大值来设置最小范围,并将范围增加 1,直到达到 50% 的阈值,但考虑到数据集可能达到数千个,这不符合我的紧凑性要求。
答案1
答案2
或者:
=LET(a,TOCOL(A:A,1),XMATCH(SUM(a)/2,SCAN(,SORT(a),LAMBDA(b,c,b+c)),1))
其中a
声明仅保留 A 列中的非空单元格值(您也可以使用它TOCOL(A:A/ISNUMBER(A:A),2)
仅保留数字值,但没有数字也可以工作)。
a
然后我们使用 XMATCH 在从最小到最大值排序的值的 SUM 的 SCAN 中找到第一个等于或大于除以 2(=50%)的总和的值a
(如果包含文本,这些将导致错误,但在错误的末尾,在找到匹配之前)。