SAS:递归处理数据集以获取实体之间的所有连接

SAS: recursively process dataset to get all connections between entities

我有一个包含关系的桥接 table in01。例如。客户 A 与客户 B 相关(然后存储在两个重复记录 A/B 和 B/A 中)。

/* 1. Testdata */
data in01(keep=primary: secondary:);
    infile datalines;
    length primary_party_no secondary_party_no $ 15;
    input primary_party_no secondary_party_no ;
    datalines;
A B
B A
A C
C A
B D
D B
W Z
Z W
Y Z
Z Y
X Y
Y X
;
run;

任务:我的任务是将所有客户与一个连接分组并创建一个 ID,无论连接客户所需的“链接”数量如何。

在上面的示例中,Group 1 将由 A, B, C, D 组成,而 Group 2 将由 W, X, Y, Z.

组成

我认为数据必须递归循环 - 然而,我无法弄清楚如何设计在每个循环中调用自身的数据步骤或宏。

解决此问题的良好起点是什么?

看起来您正在尝试从您的连接建立的网络中计算连接的子图。请参阅上一个问题。

在您的例子中,节点 ID 变量是字符而不是数字。另一个问题中提到的宏已更新为处理角色节点 ID https://github.com/sasutils/macros/blob/master/subnet.sas

听起来你的连接不是one-way所以禁用定向选项。

filename src url 'https://raw.githubusercontent.com/sasutils/macros/master/subnet.sas';
%include src;
%subnet
(in=in01
,out=want
,from=primary_party_no 
,to=secondary_party_no 
,directed=0
);
proc print data=want;
run;

结果:

       primary_    secondary_
Obs    party_no     party_no     subnet

  1       A            B            1
  2       A            C            1
  3       B            A            1
  4       B            D            1
  5       C            A            1
  6       D            B            1
  7       W            Z            2
  8       X            Y            2
  9       Y            X            2
 10       Y            Z            2
 11       Z            W            2
 12       Z            Y            2