Algorithm SAS分组算法

Algorithm SAS分组算法,algorithm,sas,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包含与

我有下面的模型表

#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) );
案例二:

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


显示

…使用哈希的迭代方法。 两个哈希保持分配给每个键值的groupId。 另外两个哈希用于维护组映射路径。 如果可以在不引起映射的情况下传递数据,则组 我们已经下了充分的决心。 最后一次传递完成,此时GroupID被分配给每个组 配对并将数据输出到表中


如果存在另一个a=4和b=2的观测值,您希望发生什么?这是否意味着只有一个群体?还是只想按A、B的顺序处理这些行,使其位于第6行和第7行之间,并形成四个组?
A
B
对于每个连续的行总是增加吗?如果是,则Richard的答案有效,但如果不是,则这是一个更棘手的问题,需要多次通过数据来识别连接的组件。只有当
a
b
都是相对于
n
单调增加时,这才有效。像Tom的例子或例如
n=8a=5b=4
之类的任何东西都不会得到正确处理。我的答案不依赖于单一性,它假定所需的分组是按行连续性(在成对项目槽内)进行的——类似于
by。。。未排序
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.