将 child 行计入分层列中的 parent 行
Count child rows into parent row in hierarchical column
我在 SAS 中使用 oracle table 工作,其中包含分层代码列表列、COUNT 列和层次结构指示器列,并且需要根据 parent 节点更新 COUNT 列节点下 child 的计数。
ID level code count
1 1 1 (null)
2 2 15 (null)
3 3 156 1
4 2 18 (null)
5 3 181 1
6 3 182 1
7 1 2 (null)
8 2 20 (null)
9 3 205 1
10 3 206 1
注意:
parent个节点不应该被统计,只统计最低的childs(SO code=1是count=3,code=2是count=2)
"lowest"child节点的预设计数为1,我需要更新NULL值。
- 编码表的长度为 1 到 10 个字符。所以 9 个层级 parents.
- 我更喜欢 PROC SQL 解决方法
我尝试创建一个临时 SAS 数据集和 UPDATE - SET = (SELECT COUNT) WHERE 在 select 中使用 SUBSTR 函数,但无法弄清楚如何使其工作对于每个层级。
只做一个自连接。此示例使用长度 3 作为终端节点,但如果您的实际数据使用 10,则只需将 3 更改为 10。
proc sql ;
create table want as
select a.id,a.level,a.code
, (a.level=3) as Terminal_Node
, sum(b.level=3) as Count_Terminal_Nodes
from have a full join have b
on a.code = substr(b.code,1,a.level)
group by a.id,a.level,a.code
order by 1
;
quit;
我在 SAS 中使用 oracle table 工作,其中包含分层代码列表列、COUNT 列和层次结构指示器列,并且需要根据 parent 节点更新 COUNT 列节点下 child 的计数。
ID level code count
1 1 1 (null)
2 2 15 (null)
3 3 156 1
4 2 18 (null)
5 3 181 1
6 3 182 1
7 1 2 (null)
8 2 20 (null)
9 3 205 1
10 3 206 1
注意:
parent个节点不应该被统计,只统计最低的childs(SO code=1是count=3,code=2是count=2)
"lowest"child节点的预设计数为1,我需要更新NULL值。
- 编码表的长度为 1 到 10 个字符。所以 9 个层级 parents.
- 我更喜欢 PROC SQL 解决方法
我尝试创建一个临时 SAS 数据集和 UPDATE - SET = (SELECT COUNT) WHERE 在 select 中使用 SUBSTR 函数,但无法弄清楚如何使其工作对于每个层级。
只做一个自连接。此示例使用长度 3 作为终端节点,但如果您的实际数据使用 10,则只需将 3 更改为 10。
proc sql ;
create table want as
select a.id,a.level,a.code
, (a.level=3) as Terminal_Node
, sum(b.level=3) as Count_Terminal_Nodes
from have a full join have b
on a.code = substr(b.code,1,a.level)
group by a.id,a.level,a.code
order by 1
;
quit;