SAS分组算法

时间:2018-05-12 06:32:00

标签: 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组,因为它们都具有= 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组中。

有没有办法让算法找到这些组?

1 个答案:

答案 0 :(得分:1)

案例I:

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

使用LAG函数检查两个变量的先前值。如果两者都已更改,则增加组值。例如

group + ( a ne lag(a) and b ne lag(b) );

案例II:

根据所有数据的配对项槽值链接确定分组。

来自grouping pairs by either key

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分配给每个     对,数据输出到表格。