首页 > 解决方案 > 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 互连的行被分组。我将尝试解释为什么这些行在同一组中

总体逻辑是,如果行 x 包含与行 y 相同的 a 或 b 值,则行 x 也属于与 y 所属的同一组。按照相同的逻辑,第 5,6 和 7 行在第 2 组中。

有没有办法制定算法来找到这些组?

标签: algorithmsas

解决方案


案例一:

分组定义为连续行内的项目链接。

使用 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 分配给每对,并将数据输出到表中。


推荐阅读