algorithm - SAS分组算法
问题描述
我有以下模型表
#n a b group
1 1 1 1
2 1 2 1
3 2 2 1
4 2 3 1
5 3 4 2
6 3 5 2
7 4 5 2
我正在使用 SAS 来解决这个问题。在列组中,通过 a 和 b 互连的行被分组。我将尝试解释为什么这些行在同一组中
- 第 1 到 2 行属于第 2 组,因为它们都有 a = 1
- 第 3 行在第 2 组中,因为第 2 行和第 3 行中的 b = 2 并且第 2 行在第 1 组中
- 第 3 行和第 4 行在第 1 组中,因为两行中的 a = 2 并且第 3 行在第 1 组中
总体逻辑是,如果行 x 包含与行 y 相同的 a 或 b 值,则行 x 也属于与 y 所属的同一组。按照相同的逻辑,第 5,6 和 7 行在第 2 组中。
有没有办法制定算法来找到这些组?
解决方案
案例一:
分组定义为连续行内的项目链接。
使用 LAG 函数检查两个变量的先验值。如果两者都发生了变化,则增加组值。例如
group + ( a ne lag(a) and b ne lag(b) );
案例二:
从所有数据的配对项目槽值链接确定的分组。
General statement of problem:
-----------------------------
Given: P = p{i} = (p{i,1},p{i,2}), a set of pairs (key1, key2).
Find: The distinct groups, G = g{x}, of P,
such that each pair p in a group g has this property:
key1 matches key1 of any other pair in g.
-or-
key2 matches key2 of any other pair in g.
演示
... 一种使用哈希的迭代方式。两个哈希维护分配给每个键值的 groupId。两个额外的哈希用于维护组映射路径。当数据可以在不引起映射的情况下传递时,则组已完全确定。完成最后一次传递,此时将 groupIds 分配给每对,并将数据输出到表中。
推荐阅读
- xml - 使用所有必需的枚举进行 XSD 验证
- r - 基于另一列创建列但不按字母顺序匹配
- java - 使用 XRay AWS 跟踪 Java 应用程序时找不到段?
- python - Pandas 列 dtype 是对象,但 python 认为它是浮点数
- python - 将声音文件导入为 sf 但在 jupyter notebook sf 上给出 NameError
- r - 如何修复在 R 中截断 y 轴文本的图像保存?
- java - 如何从 SortedArrayList 中删除多个元素
- python-3.x - Discord Bot RGB 角色 Python
- javascript - 高效设计链式承诺
- c# - 在实时图表中使用自定义变量