3. 转置
使用上面创建的 EmpInfo.txt 文件,统计每天出生的人数,要求结果返回为交叉表,月份的英文缩写作为列名,日期作为首列。将结果输出到 Excel 文件 EmpBirthday.xlsx。
参考答案:
解答:
A | |
---|---|
1 | =T(“EmpInfo.txt”) |
2 | =A1.groups(month(Birthday):Month,day(Birthday):Day;count(~):Count) |
3 | =12.(string(date(2024,~,1),“MMM”)) |
4 | >A2.run(A3(Month):Month) |
5 | =A2.pivot(Day;Month,Count) |
6 | >file(“EmpBirthday.xlsx”).xlsexport@t(A5;“Daily Statistics”) |
A1 读出人员信息序表,这里使用了 T(fn) 函数,其效果和 =file(“EmpInfo.txt”).import@t() 是相同的,将会自动识别文件扩展名读为序表。A2 中执行分组汇总计算,分组时设置了两层:先按生日的月份分组,然后再按日期分组,分组时用 count 计算每组中总人数。执行后,A2 结果如下:
由于月份需要使用英文缩写,因此要进一步修改。A3 中,循环生成 12 个月份的日期,并用 string(dt, fmt) 函数,通过指定月份缩写的显示格式 "EEE" 来得到结果如下:
A4 中在序表中循环,修改 Month 字段为对应的英文缩写,修改后,A2 中结果如下
此时,A2 中的结果实际上是使用 Month 和 Day 两个维度的表,在 A5 中用 A.pivot()函数,将 A2 中的结果按所需维度转置,就可以得到最终所需的交叉表结果。A6 存储结果到 Excel 时,需要用到 f.xlsexport(A) 函数,这里需要输出标题,添加了 @t 选项,这里还指定了导出时的页面名称。A6 中存储数据时,同样可以使用 T()函数,即将代码改为 >T(“EmpBirthday.xlsx”:A5;“Daily Statistics”),执行时会根据扩展名自动识别,输出 A5 中的数据到 Excel 文件。
英文版