저는 계층 적 코드 목록 열, 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 코드 = 1은 카운트 = 3, 코드 = 2는 카운트 = 2).
"가장 낮은"자식 노드에는 미리 설정된 개수가 1 개이므로 NULL 값을 업데이트해야합니다.
임시 SAS 데이터 세트를 만들고 선택에서 SUBSTR 함수를 사용하여 UPDATE-SET = (SELECT COUNT) WHERE를 만들려고했지만 모든 계층 수준에서 작동하도록 만드는 방법을 알아낼 수 없었습니다.
셀프 조인 만하면됩니다. 이 예에서는 길이 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;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다