7.25 CrossApply 运算
遍历多个数据文件,对序表及序列值进行 Cross Apply 运算生成新序表。
遍历文件夹中存储的所有某小学在线教学终端调查表,统计各种终端占比。

| ID | STUDENT_NAME | TERMINAL |
|---|---|---|
| 1 | Rebecca Moore | Phone |
| 2 | Ashley Wilson | Phone,PC,Pad |
| 3 | Rachel Johnson | Phone,PC,Pad |
| 4 | Emily Smith | Phone,Pad |
| 5 | Ashley Smith | Phone,PC |
| 6 | Matthew Johnson | Phone |
| 7 | Alexis Smith | Phone,PC |
| 8 | Megan Wilson | Phone,PC,Pad |
| … | … | … |
使用 A.news() 函数对序表与拆分后的终端序列进行 Cross Apply 运算。
脚本:
| A | B | ||
|---|---|---|---|
| 1 | =directory@ps(“D:/Primary School”) | ||
| 2 | for A1 | =T(A2) | |
| 3 | =@+=B2.len() | ||
| 4 | =B2.news(B2.TERMINAL.split@c(); ID, STUDENT_NAME, ~:TERMINAL) | ||
| 5 | =B4.groups(TERMINAL; count(~):Count) | @ | |
| 6 | =B5.groups(TERMINAL;string(sum(Count)/B3, “#.##%”):PERCENTAGE) | ||
A1 递归遍历目录,列出所有文件
B2 循环导入各年级各班的问卷 excel 文件
B3 统计总行数,即总人数
B4 使用 news 函数将问卷表与拆分后的终端序列进行 Cross Apply 运算
B5 分组汇总各终端的数量,结果合并到本格。如果合并 B4 的结果可能导致内存不足。
A6 对每个班的统计结果再分组汇总
运行结果:
| TERMINAL | PERCENTAGE |
|---|---|
| PC | 70% |
| Pad | 56.67% |
| Phone | 93.33% |
