<?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 Association between observations in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424901#M104621</link>
    <description>&lt;P&gt;Hi community !&lt;BR /&gt;&lt;BR /&gt;I'm stuck on a problem of association. My data looks like :&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;client&lt;/TD&gt;&lt;TD&gt;Masterclient_1&lt;/TD&gt;&lt;TD&gt;Masterclient_2&lt;/TD&gt;&lt;TD&gt;Masterclient_3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;d&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I would like to add a column which make the relation between my observations. So it would be something like that :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;client&lt;/TD&gt;&lt;TD&gt;Masterclient_1&lt;/TD&gt;&lt;TD&gt;Masterclient_2&lt;/TD&gt;&lt;TD&gt;Masterclient_3&lt;/TD&gt;&lt;TD&gt;MasterClient&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;d&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;First I began by taking the first column filled but there is a mistake.&lt;BR /&gt;The observation "d" would have an "e" in &lt;SPAN&gt;MasterClient&amp;nbsp;instead of an "a" like the others of his group.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Do you have an idea for solving that problem?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;An idea I'm exploring is to fill the blanks when it's possible. Like that I could be able to use my first method.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;You can answer in french or english. Thank you !&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 04 Jan 2018 14:04:30 GMT</pubDate>
    <dc:creator>kawabongga</dc:creator>
    <dc:date>2018-01-04T14:04:30Z</dc:date>
    <item>
      <title>Association between observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424901#M104621</link>
      <description>&lt;P&gt;Hi community !&lt;BR /&gt;&lt;BR /&gt;I'm stuck on a problem of association. My data looks like :&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;client&lt;/TD&gt;&lt;TD&gt;Masterclient_1&lt;/TD&gt;&lt;TD&gt;Masterclient_2&lt;/TD&gt;&lt;TD&gt;Masterclient_3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;d&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I would like to add a column which make the relation between my observations. So it would be something like that :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;client&lt;/TD&gt;&lt;TD&gt;Masterclient_1&lt;/TD&gt;&lt;TD&gt;Masterclient_2&lt;/TD&gt;&lt;TD&gt;Masterclient_3&lt;/TD&gt;&lt;TD&gt;MasterClient&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;c&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;d&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;b&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;a&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;TD&gt;e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;First I began by taking the first column filled but there is a mistake.&lt;BR /&gt;The observation "d" would have an "e" in &lt;SPAN&gt;MasterClient&amp;nbsp;instead of an "a" like the others of his group.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Do you have an idea for solving that problem?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;An idea I'm exploring is to fill the blanks when it's possible. Like that I could be able to use my first method.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;You can answer in french or english. Thank you !&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jan 2018 14:04:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424901#M104621</guid>
      <dc:creator>kawabongga</dc:creator>
      <dc:date>2018-01-04T14:04:30Z</dc:date>
    </item>
    <item>
      <title>Re: Association between observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424904#M104622</link>
      <description>&lt;P&gt;I don't understand the logic here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why is MasterClient='a' in the fourth observation?&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jan 2018 13:47:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424904#M104622</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2018-01-04T13:47:42Z</dc:date>
    </item>
    <item>
      <title>Re: Association between observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424907#M104624</link>
      <description>&lt;P&gt;It's an "a" because the first observation is related to the 2nd and the 2nd to the fourth. I want the same id for all of them.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jan 2018 13:51:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424907#M104624</guid>
      <dc:creator>kawabongga</dc:creator>
      <dc:date>2018-01-04T13:51:18Z</dc:date>
    </item>
    <item>
      <title>Re: Association between observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424963#M104654</link>
      <description>&lt;P&gt;It's a Type II dimension with a very bad starting data structure. You need recursion or a tree search and need to reform your data to make this work.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Is this how your data is stored originally? Type II dimensions are typically in a long format.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://en.wikipedia.org/wiki/Slowly_changing_dimension" target="_blank"&gt;https://en.wikipedia.org/wiki/Slowly_changing_dimension&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you resturcture your data to have a start and end, this macro will create the 'groups' for you so that you can uniquely identify each person.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://gist.github.com/statgeek/14e3aa2a9f718f551cd98134e9ceed30" target="_blank"&gt;https://gist.github.com/statgeek/14e3aa2a9f718f551cd98134e9ceed30&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Jan 2018 16:25:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/424963#M104654</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-01-04T16:25:48Z</dc:date>
    </item>
    <item>
      <title>Re: Association between observations</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/425248#M104735</link>
      <description>&lt;P&gt;First of all , you need to know the top Master .&lt;/P&gt;
&lt;P&gt;Here I made a table to contain it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data ancient;
 set have;
 if _start=_end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;After that the following code could give you a start.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
 


data temp;
infile cards expandtabs ;
input client $ Masterclient_1 $ Masterclient_2 $ Masterclient_3 $;
cards;
a	a . .	 	 
b	a	b	. 
c	 .	 .	e
d	 .	b	 .
e	 .	. 	e
;
run;
data have;
 set temp;
 array x{*} $ Masterclient: ;
 _end=client;
 do i=1 to dim(x);
   if not missing(x{i}) then do;_start=x{i};output; end;
 end;
 keep _start _end;
run;




data ancient;
 set have;
 if _start=_end;
run;



data want(keep=path);
if _n_ eq 1 then do;
length path _path  $ 400 ;
if 0 then set have;
declare hash ha(hashexp:20,dataset:'have(where=(_start is not missing and _end is not missing))',multidata:'y');
ha.definekey('_start');
ha.definedata('_end');
ha.definedone();

declare hash pa(ordered:'y');
declare hiter hi_path('pa');
pa.definekey('n');
pa.definedata('n','path');
pa.definedone();

end;


set ancient;
count=1;n=1;_n=1;
path=catx('|',_start,_end);
   
pa.add();
do while(hi_path.next()=0);
 if n ne 1 then pa.remove(key:_n);_n=n;
 _path=path;  
 _start=scan(path,-1,'|');
 rc=ha.find();if rc ne 0 then output;
 do while(rc=0);
  if not findw(path,strip(_end),'|') then do;
   if length(path)+length(_end)+1 gt lengthc(path) then do;
    putlog 'ERROR: The length of path and _path are set too short';
    stop;
   end;
   
   count+1;n=count;
   path=catx('|',path,_end);
   pa.add();
   path=_path;
 end;
  rc=ha.find_next();
end;
end;
pa.clear();
run;
data want;
 set want;
 start=scan(path,1,'|');
 end=scan(path,-1,'|');
 count=countw(path,'|')-1;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 05 Jan 2018 15:05:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Association-between-observations/m-p/425248#M104735</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-01-05T15:05:35Z</dc:date>
    </item>
  </channel>
</rss>

