【发布时间】:2017-04-26 09:58:27
【问题描述】:
我正在使用带有分层代码列表列、COUNT 列和分层指示符列的 oracle 表在 SAS 中工作,并且需要根据节点下子节点的计数更新父节点的 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 code=1 is count=3, code=2 is count=2)
“最低”子节点的预设计数为 1,我需要更新 NULL 值。
- 编码列表长度为 1 到 10 个字符。所以父母有 9 个等级。
- 我更喜欢 PROC SQL 解决方法
我尝试创建一个临时 SAS 数据集并 UPDATE - SET = (SELECT COUNT) WHERE 在选择中使用 SUBSTR 函数,但不知道如何使其适用于每个层次结构级别。
【问题讨论】:
-
提及所需的输出。
-
你好。感谢回复。所需的输出是在“计数”列中具有更新值的同一个表。 (空)值更新为表中的实际计数。 ID=1 计数=3,ID=2 计数=1,ID=4 计数=2 以此类推。
-
我看不出你怎么知道哪个节点是父节点,哪个节点是子节点。也许通过匹配 CODE 值的前缀? CODE 是数字还是字符变量?
-
如果您更新空值,您将如何知道哪些是终端节点?
-
@Tom 没错。代码是一个字符变量。并且每个元素的父节点都是长度为(n-1)且所有字符匹配的元素。 code="1" 是 code="11" 和 code="12" 等的父代,而 code="12" 是 code="121" 和 code="122" 的父代。但这不是典型的层次结构,因为长度为 1 到 9 的父母不应该算作计数列中的孩子。真正的孩子只有 10 的长度。所以从数学上讲,一个级别的计数总和 = 其他级别的计数总和。不确定我是否解释清楚:/