<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: PROC CLUSTER: How to get the hierarchy of nodes for each observation? in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585124#M14266</link>
    <description>&lt;P&gt;Hash objects are efficient for this kind of processing. Try :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
if 0 then set have;
length hier $100;
if _N_ = 1 then do;  
    declare hash h(dataset: "have");
    h.definekey("_NAME_");
    h.definedata("_NAME_", "_PARENT_");
    h.definedone();
end;
declare hiter hList('h');
_rc = hList.first();
do until(hList.next() ne 0);
    if substr(_name_,1,2) ne "CL" then do;
        n = _name_; hier = _parent_;
        do while(h.find(key:_PARENT_) = 0);
            hier = catx("_", _parent_, hier);
            end;
        output;
        end;
    end;
stop;
drop _name_ _parent_ _rc;
rename n=_name_;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 30 Aug 2019 03:59:11 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2019-08-30T03:59:11Z</dc:date>
    <item>
      <title>PROC CLUSTER: How to get the hierarchy of nodes for each observation?</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585089#M14261</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I use PROC CLUSTER and PROC TREE to do hierarchical clustering and draw dendrograms. My input data typically features around thousand observations. As part of the analysis I output (using the outtree= option) the hierarchy of linkages (denoted as CL1, CL2, CL3,…) between the observations (e.g., Obs1, Obs2, Obs3,…). This information is provided in the output variables _NAME_ and _PARENT_ .&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;My question is: how can I get the hierarchy of linkages (i.e., notes) listed for each observation, as a string? And can this be done in a generic manner such that it is applicable to data sets with thousands of observations?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Simple example: one has a data set with ten observations. Using PROC CLUSTER one gets an output specifying the following linkages between nodes and observations:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;_NAME_ _PARENT_&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL4&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL5&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL4&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;CL9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL9&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs10&amp;nbsp;&amp;nbsp;&amp;nbsp; CL7&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL9&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL7&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL5&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL8&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL8&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I would like to generate (in a generic manner) an additional output specifying the hierarchy (sequence) of nodes for all the observations. Like this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Observation&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hierarchy&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL9&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL9&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL4_CL6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL4_CL6&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL4_CL8&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL2_CL4_CL8&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs10&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL3_CL5_CL7&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL3_CL5_CL7&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL3_CL5&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Obs3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CL1_CL3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;I would greatly appreciate if someone could point me towards &lt;SPAN&gt;a solution?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot in advance!&lt;/P&gt;</description>
      <pubDate>Thu, 29 Aug 2019 20:44:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585089#M14261</guid>
      <dc:creator>onechrister</dc:creator>
      <dc:date>2019-08-29T20:44:03Z</dc:date>
    </item>
    <item>
      <title>Re: PROC CLUSTER: How to get the hierarchy of nodes for each observation?</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585124#M14266</link>
      <description>&lt;P&gt;Hash objects are efficient for this kind of processing. Try :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
if 0 then set have;
length hier $100;
if _N_ = 1 then do;  
    declare hash h(dataset: "have");
    h.definekey("_NAME_");
    h.definedata("_NAME_", "_PARENT_");
    h.definedone();
end;
declare hiter hList('h');
_rc = hList.first();
do until(hList.next() ne 0);
    if substr(_name_,1,2) ne "CL" then do;
        n = _name_; hier = _parent_;
        do while(h.find(key:_PARENT_) = 0);
            hier = catx("_", _parent_, hier);
            end;
        output;
        end;
    end;
stop;
drop _name_ _parent_ _rc;
rename n=_name_;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 30 Aug 2019 03:59:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585124#M14266</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-08-30T03:59:11Z</dc:date>
    </item>
    <item>
      <title>Re: PROC CLUSTER: How to get the hierarchy of nodes for each observation?</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585145#M14268</link>
      <description>&lt;P&gt;Thank you very much!&lt;/P&gt;&lt;P&gt;It works like a charm!&lt;/P&gt;</description>
      <pubDate>Fri, 30 Aug 2019 08:54:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-CLUSTER-How-to-get-the-hierarchy-of-nodes-for-each/m-p/585145#M14268</guid>
      <dc:creator>onechrister</dc:creator>
      <dc:date>2019-08-30T08:54:39Z</dc:date>
    </item>
  </channel>
</rss>

