对同一分类下的数据进行和次序有关的过滤

例题描述和简单分析

有 Excel 文件 stock.xlsx,部分数据如下:

证券代码 交易日期 日开盘价 check
603960 2017-08-17 29.13 2
603960 2017-08-28 29.44 1
603960 2017-08-29 32 3
603960 2020-02-10 32.16 1
603960 2020-02-11 36 3
603963 2017-09-22 18.12 2
603963 2017-09-25 19.93 1
603963 2017-09-26 21.92 1
603963 2017-10-16 45 3
603963 2017-12-25 25 1
603963 2017-12-26 27.68 1
603963 2017-12-27 30.3 3
603963 2018-03-08 25.52 1

现需要对同一证券代码下的数据进行过滤,过滤要求为从第一次 check 列出现 2 至第一次 check 列出现 3 之间的数据,部分结果如下:

证券代码 交易日期 日开盘价 check
603960 2017-08-17 29.13 2
603960 2017-08-28 29.44 1
603960 2017-08-29 32 3
603963 2017-09-22 18.12 2
603963 2017-09-25 19.93 1
603963 2017-09-26 21.92 1
603963 2017-10-16 45 3

解法及简要说明

在集算器中编写脚本 p1.dfx,如下所示:


A
1 =file("stock.xlsx").xlsimport@t()
2 =A1.group(#1).conj(~.m(~.pselect(check==2):~.pselect(check==3)))
3 =file("result.xlsx").xlsexport@t(A2)

简要说明:

A1  读取 stock.xlsx 数据,返回成序表

A2  按证券代码列(#1 代表第一列)分组,每组内取第一个 check 为 2 至第一个 check 为 3 之间的数据,各组结果合并

A3  结果导出至 result.xlsx

问答搜集

http://club.excelhome.net/thread-1572959-1-1.html