Excel技术需求:识别30天内重复ID行并统计患者疾病数量
嘿,针对你这个25000行的患者就诊Excel数据处理需求,我分两部分给你实用的解决方案——先搞定疾病数量统计,再处理30天内的重复就诊识别,都是适合大数据集的方法:
一、统计整个队列及每位患者的疾病数量
1. 整个队列的去重疾病总数
假设你的疾病ID列是DxID(比如在D列),直接用动态数组函数就能快速得到去重后的疾病数量:
=ROWS(UNIQUE(D2:D25001))
这里D2:D25001是你的数据区域(排除表头),如果你的Excel版本不支持动态数组,也可以用SUMPRODUCT(1/COUNTIF(D2:D25001,D2:D25001)),不过前者更直观高效。
2. 每位患者的独有疾病数量
有两种简单方法:
- 数据透视表法(最省心):插入数据透视表,把
ID拖到「行」区域,DxID拖到「值」区域,然后右键点击值区域的数字→「值字段设置」→选择「计数(去重复)」,就能直接看到每个患者对应的不同疾病数量。 - 函数法(灵活自定义):先在空白列用
=UNIQUE(A:A)(A列是ID列)得到所有唯一患者ID,然后在旁边列输入:
=COUNT(UNIQUE(FILTER(D:D,A:A=G2)))
这里G2是第一个唯一患者ID的单元格,下拉公式就能批量得到每个患者的疾病数。
二、识别同一患者同一DxID间隔30天内的重复记录
你已经搞定了同一天的重复识别,现在处理30天内的,推荐两种方法:
1. 辅助列公式法(适合快速上手)
假设ID在A列,DxID在D列,DxDate在E列,在F列插入辅助列,输入公式:
=IF(COUNTIFS(A:A,A2,D:D,D2,E:E,">="&E2-30,E:E,"<"&E2)>0,"30天内重复","")
下拉公式后,标记为「30天内重复」的行,就是同一患者同一疾病、且距当前就诊30天内有过就诊的记录。公式里的<E2确保不会把同一天的记录重复标记(你已经处理过同一天的了),如果需要包含同一天,改成<=E2即可。
⚠️ 注意:25000行数据用COUNTIFS可能会有点卡顿,要是出现明显延迟,优先用下面的Power Query方法。
2. Power Query法(高效处理大数据)
Power Query对大数据集的处理远快于普通函数,步骤如下:
- 选中你的数据区域,点击「数据」选项卡→「从表格/区域」(旧版Excel找「获取和转换数据」→「从表格」),加载到Power Query编辑器。
- 点击「开始」选项卡→「分组依据」,分组列选
ID和DxID,操作选「所有行」,新列名可以叫「就诊记录」。 - 展开「就诊记录」列(点击列名旁边的小箭头),然后按
ID、DxID、DxDate排序。 - 添加自定义列:点击「添加列」→「自定义列」,输入公式:
= Duration.Days([DxDate] - List.Previous([DxDate]))
这个公式会计算当前行日期与同组上一行日期的天数差。
5. 添加标记列:再添加一个自定义列,输入:
= if [自定义列] <= 30 then "30天内重复" else null
- 最后点击「关闭并上载」,就能得到标记好重复记录的数据集了。
额外注意事项
- 确保
DxDate列是真正的日期格式,如果是文本格式,先选中列→「数据」→「分列」→选择日期格式转换。 - 要是你需要删除这些30天内的重复记录,Power Query里筛选掉标记为「30天内重复」的行即可,比手动删除高效太多。
内容的提问来源于stack exchange,提问作者SCol
相关产品推荐
相关产品推荐

