<?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 Generate a list of macro variable . in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308652#M66250</link>
    <description>&lt;P&gt;I have a simple problem . My dataset has 3 column Child , Parent, Flag&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need to search the child into the parent column and check the flag if flag is N ( New node) or Z &amp;nbsp;we need to again check the child of that parent and continue till we don't get the parent of the child and flag='Y'.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;child&lt;/TD&gt;&lt;TD&gt;parent&lt;/TD&gt;&lt;TD&gt;flag&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;&lt;TD&gt;I&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;36&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;37&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;38&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;39&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;41&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;42&lt;/TD&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;43&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My macro variable list should be generated as :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Tree_List = 1, 2, 4, 5, 36, 6, 37, 7, 38, 3, 8, 9, 39, 10, 11, 12, 17, 18, 20, 21, 40, 22, 41, 19, 23, 24, 42, 25, 43, 13, 14, 15, 44, 16, 45&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Am not able to get the idea how to start coding . Any help would be great help for me. Thanks.&lt;/P&gt;</description>
    <pubDate>Wed, 02 Nov 2016 02:55:20 GMT</pubDate>
    <dc:creator>Saurabh13</dc:creator>
    <dc:date>2016-11-02T02:55:20Z</dc:date>
    <item>
      <title>Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308652#M66250</link>
      <description>&lt;P&gt;I have a simple problem . My dataset has 3 column Child , Parent, Flag&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need to search the child into the parent column and check the flag if flag is N ( New node) or Z &amp;nbsp;we need to again check the child of that parent and continue till we don't get the parent of the child and flag='Y'.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;child&lt;/TD&gt;&lt;TD&gt;parent&lt;/TD&gt;&lt;TD&gt;flag&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;.&lt;/TD&gt;&lt;TD&gt;I&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;19&lt;/TD&gt;&lt;TD&gt;N&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;36&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;37&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;38&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;39&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;41&lt;/TD&gt;&lt;TD&gt;22&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;42&lt;/TD&gt;&lt;TD&gt;24&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;43&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My macro variable list should be generated as :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Tree_List = 1, 2, 4, 5, 36, 6, 37, 7, 38, 3, 8, 9, 39, 10, 11, 12, 17, 18, 20, 21, 40, 22, 41, 19, 23, 24, 42, 25, 43, 13, 14, 15, 44, 16, 45&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Am not able to get the idea how to start coding . Any help would be great help for me. Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Nov 2016 02:55:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308652#M66250</guid>
      <dc:creator>Saurabh13</dc:creator>
      <dc:date>2016-11-02T02:55:20Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308655#M66252</link>
      <description>&lt;PRE&gt;
What is the FLAG for ?
I also notice the order of Tree_list is based on Deep First Algorithm .
Does the order of it matter ? What if use hierarchy first algorithm ?
&lt;/PRE&gt;</description>
      <pubDate>Wed, 02 Nov 2016 03:35:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308655#M66252</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-11-02T03:35:44Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308656#M66253</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Flag is there for stop criteria. I need to stop where child has no same parent and FLAG ='Y' .&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes, Its a deep first algo.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 02 Nov 2016 03:42:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308656#M66253</guid>
      <dc:creator>Saurabh13</dc:creator>
      <dc:date>2016-11-02T03:42:55Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308716#M66281</link>
      <description>&lt;PRE&gt;
I think that FLAG is useless, since there are no children for the last person.
So you prefer Deep First Algorithm ?
Once get WANT table, use PROC SQL to get that macro variable you are talking abont,
it is easy for you I think.



data have(rename=(parent=from child=to) drop=flag);
infile cards expandtabs truncover;
input child	parent	flag $;
cards;
1	 .	I
2	1	Z
3	1	Z
4	2	N
5	4	Z
6	4	Z
7	4	Z
8	3	N
9	8	Z
10	8	Z
11	10	N
12	11	Z
13	11	Z
14	13	N
15	14	Z
16	14	Z
17	12	N
18	17	Z
19	17	Z
20	18	N
21	20	Z
22	20	Z
23	19	N
24	23	Z
25	23	Z
36	5	Y
37	6	Y
38	7	Y
39	9	Y
40	21	Y
41	22	Y
42	24	Y
43	25	Y
44	15	Y
45	16	Y
;
run;
data _null_;
 if 0 then set have;
 declare hash from_to(dataset:'have(where=(from is not missing and to is not missing))',hashexp:20,multidata:'y');
 from_to.definekey('from');
 from_to.definedata('to');
 from_to.definedone();

 if 0 then set have(keep=from rename=(from=node));
 declare hash h();
 h.definekey('node');
 h.definedone(); 
 
 declare hash che();
 che.definekey('node');
 che.definedone();
 
 declare hash all(ordered:'a');
 all.definekey('n');
 all.definedata('node');
 all.definedone(); 
 
do while(from_to.num_items ne 0);
 node=1;h.add();
 if che.check() ne 0 then do;che.add();n+1;all.add();end;
 from=node;
 rc=from_to.find();
 do while(rc=0);
  if h.check(key:to)=0 then leave;
   else do; 
          node=to;h.add();
          if che.check() ne 0 then do;che.add();n+1;all.add();end;
         end;
  if from_to.check(key:to)=0 then do; from=to;rc=from_to.find();end;
   else leave;
 end;
 from_to.find();
 from_to.removedup();
 h.clear();
end; 
all.output(dataset:'want');
stop;
run;

&lt;/PRE&gt;</description>
      <pubDate>Wed, 02 Nov 2016 10:46:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308716#M66281</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-11-02T10:46:12Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308922#M66370</link>
      <description>&lt;P&gt;Thanks a lot for the reply and solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have never used hashing in SAS so could you please explain a little about the soultion.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;1. In second hash you have kept only key so that we can search from this key.&lt;/P&gt;&lt;P&gt;2. could you please explain about 3rd and 4th hash ? Why are they created ?&amp;nbsp;&lt;/P&gt;&lt;P&gt;3. all.definekey('n'); what is n here ?&lt;/P&gt;&lt;P&gt;4. please explain about do while loop which i think is most important piece in the solution?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also want to learn so could you please explain a bit that would be great for me and my learning .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Nov 2016 02:21:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308922#M66370</guid>
      <dc:creator>Saurabh13</dc:creator>
      <dc:date>2016-11-03T02:21:25Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308927#M66372</link>
      <description>&lt;PRE&gt;
Hash Table is a big topic to talk. I have no time to go through these. 
Check documentation to get some basic concept.
My basic idea is removing a last person at every iterative .
E.X. you have
1 2
1 3
2 4
Firstly I search 1-&amp;gt;2-&amp;gt;4 and output 1-&amp;gt;2-&amp;gt;4 ,remove 2-&amp;gt;4(the last person) 
 now it look like 
1 2
1 3
Secondly I search 1-&amp;gt;2  and output 1-&amp;gt;2(if node are not in Hash Table CHE) ,remove 1-&amp;gt;2
.....
until the hash table which contains this dataset is empty
in my code: 
do while(from_to.num_items ne 0);



1. In second hash you have kept only key so that we can search from this key.
the second hash hold the search path at every time like: 1-&amp;gt;2-&amp;gt;4 or 1-&amp;gt;2

2. could you please explain about 3rd and 4th hash ? Why are they created ? 
The third CHE is holding node which has been searched in all the time.

3. all.definekey('n'); what is n here ?
the forth ALL is the result I want. if node is not in CHE then put it into ALL.
The reason I made N is for ordering node, if you don't the node in ALL will be messed up.
Keep the order is important for your question.


4. please explain about do while loop which i think is most important piece in the solution?
do while loop is removing a single person at every loop, just as I said at the beginning.

 if h.check(key:to)=0 then leave; /*&amp;lt;--If we find a dead loop then leave and remove it (4 1)*/
E.X.
1 2
1 3  
2 4
4 1

   else do;  /*else Node is not searched ,put it into H,CHE,ALL*/
          node=to;h.add();
          if che.check() ne 0 then do;che.add();n+1;all.add();end;
         end;

/*if it is last person,then leave and remove it , else find next child*/
  if from_to.check(key:to)=0 then do; from=to;rc=from_to.find();end;
   else leave; /*it is last person*/
 end;
 from_to.find(); /*make point pointed where we want delete*/
 from_to.removedup(); /*remove it e.x. 2-&amp;gt;4*/
 h.clear();


&lt;/PRE&gt;</description>
      <pubDate>Thu, 03 Nov 2016 03:03:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308927#M66372</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-11-03T03:03:44Z</dc:date>
    </item>
    <item>
      <title>Re: Generate a list of macro variable .</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308929#M66374</link>
      <description>&lt;P&gt;Thanks for the explanation . I have also read some documents about the hash.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Nov 2016 03:11:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Generate-a-list-of-macro-variable/m-p/308929#M66374</guid>
      <dc:creator>Saurabh13</dc:creator>
      <dc:date>2016-11-03T03:11:03Z</dc:date>
    </item>
  </channel>
</rss>

