捕获一个ID占用的'paths'个数

Capture the number of 'paths' an ID takes

我有一个数据集,通过列出节点来捕获一个人 'route'。数据如下所示:

data have;
    input id node $;
    datalines;
    1 A 
    1 B 
    1 C 
    2 B 
    2 C 
    3 A 
    3 C 
    4 A 
    4 B 
    4 C 
; 
run;

我正在尝试捕获 ID 走过的所有不同路线,然后统计出现的次数。示例输出:

Route  Count
ABC      2
BC       1
AC       1

使用转置语句来测量停止 1、2、3 等是实现此目的的唯一方法吗?

可能最简单的方法是为每个“路径”构建一个字符串。

data want;
  do until(last.id);
    set have;
    by id;
    length route  ;
    route=cats(route,node);
  end;
  drop node;
run;
proc freq ;
   tables route;
run;

如果节点比单个字母更复杂,那么您可能想要使用 CATX() 来代替在生成的 ROUTE 字符串中在它们之间插入分隔符。当串联的节点看起来像另一个节点时,这将避免潜在的混淆。例如,如果有一个节点 'AB',它看起来与节点 'A' 后跟节点 'B'.

相同