循环运算
【摘要】
循环运算是指按照一定的次序对集合的成员进行计算。除了在循环中访问当前成员、对成员赋值等简单的计算,还有在循环中进行跨行计算、嵌套循环、迭代运算等复杂需求。如何简便快捷的处理循环运算,这里为你全程解析,并提供 esProc 示例代码。
1. 循环比较每行记录判断文件是否相同
循环判断,每次在序列最后添加新的成员。
【例 1】 比较两个行数相同的文件中有多少行数据完全一致。文件部分数据如下:

【SPL脚本】

A5的执行结果如下:

2. 循环赋值
对集合的成员进行循环计算并赋值。
【例 2】 在销售表中,将 2014 年前 10% 的销售员再给予 5% 的业绩奖励。销售表部分数据如下:

【SPL脚本】

A5的执行结果如下:

3. 复杂跨行计算
分组统计数据后,对每组分列统计不同的结果,同时跨行计算。
【例 3】根据用户支付数据明细表,统计各个用户 2014 年每月应付金额的汇总表。用户支付数据明细表部分数据如下:

要求根据指定年份(如2014),输出每月应付金额,若无当月数据,则当月应付金额为上月该值:

【SPL脚本】

A2的执行结果如下:

4. 最大连续增长天数
在循环计算中,计算某列的连续增长次数。
【例 4】 根据上证指数记录,求 2019 年收盘价增长的最大连续天数。上证指数表部分数据如下:

【SPL脚本】

A3的执行结果如下:

5. 嵌套循环
嵌套使用循环函数计算。
【例 5】 百鸡问题,鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几?
【SPL 脚本】

A4的执行结果如下:

6. 循环中调用次数
循环查找文本,并按需要生成结果,循环中需要使用循环次数。
【例 6】 根据文本 1 中的关键词,在文本 2 中查找,希望整理为输出结果:

【SPL 脚本】

A3的执行结果如下:

7. 循环时按位置统计临近数据
循环计算,计算时按位置计算偏移区间内均值。
【例 7】 根据招商银行的股市交易表,列出 2020 年 1 月 1 日至 10 日每天的 20 日收盘均价。股市交易表部分数据如下:

【SPL脚本】

A4的执行结果如下:

8. 迭代累加
循环时迭代累加,根据累加值筛选。
【例 8】根据销售表,统计出 2014 年每个月达到 20 笔订单所需天数。销售表部分数据如下:

【SPL脚本】

A4的执行结果如下:

9. 分组计算排名
循环中计算分组中的排名。
【例 9】根据员工收入表,求员工在本部门的收入排名。员工收入表部分数据如下:

【SPL 脚本】

A2的执行结果如下:

10. 分组计算紧凑排名
循环计算分组中的紧凑排名。
【例 10】根据成绩表,求出一班学生 ID 为 8 的学生的各科成绩在本班的排名。成绩表部分数据如下:

【SPL 脚本】

A4的执行结果如下:

11. 迭代求和
循环计算迭代求和的结果。
【例 11】根据上证指数表,计算 2019 年每个交易日的全年累计成交金额。上证指数表部分数据如下:

【SPL 脚本】

A3的执行结果如下:

12. 自定义迭代计算
循环中使用迭代计算,自行设置迭代中的计算表达式和终止条件。
【例 12】根据销售表数据,统计 2014 年第一季度到哪一天完成了销售总额 15 万的季度目标。销售表部分数据如下:

【SPL脚本】

A3的执行结果如下:

《SPL CookBook》中还有更多相关计算示例。