将子行计入分层列中的父行

时间:2017-04-26 09:58:27

标签: sas proc-sql

我在SAS中使用带有分层代码列表,COUNT列和层次结构指示符列的oracle表,并且需要根据节点下的子节点数更新父节点的COUNT列。

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

注:

  • 不应计算父节点,只计算最低的子节点(SO代码= 1是计数= 3,代码= 2是计数= 2)

  • "最低"子节点的预设计数为1,我需要更新NULL值。

  • 代码列表长度为1到10个字符。所以9个等级的父母。
  • 我更喜欢PROC SQL解决方法

我尝试在select中创建一个临时SAS数据集和UPDATE - SET =(SELECT COUNT)WHERE和一个SUBSTR函数,但是无法弄清楚如何使它适用于每个层次结构级别。

1 个答案:

答案 0 :(得分:0)

做一个自我加入。此示例使用长度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;

enter image description here