7.25 CrossApply 运算

 

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

imagepng

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%