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
我有一个包含关系的桥接 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