<?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: Filling empty cells based on unique id in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761737#M241080</link>
    <description>&lt;P&gt;Using a hash-object is missing the collection of solutions:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   set have;
   
   if _n_ = 1 then do;
      declare hash h(dataset: 'have(where=(Segment ^= 0))');
      h.defineKey('Unique_Id', 'Age');
      h.defineData('Segment');
      h.defineDone();
   end;
   
   rc = h.find();
   /* no need to check rc */
   drop rc;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Mon, 16 Aug 2021 06:36:17 GMT</pubDate>
    <dc:creator>andreas_lds</dc:creator>
    <dc:date>2021-08-16T06:36:17Z</dc:date>
    <item>
      <title>Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761430#M240951</link>
      <description>&lt;P&gt;So i have a dataset like this that has a few million rows:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Unique_Id          Age        Segment
1                  56         0
1                  57         4       
1                  57         0   
2                  23         0
2                  24         0        
2                  24         1
3                  77         0
3                  77         2
3                  78         0
3                  78         0
4                  86         0
4                  88         1.1
4                  88         0
5                  12         0
5                  12         0
5                  14         0
5                  14         0&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I want to fill the segment portion up by matching it with age and unique_id. So unique_id 2 is in segment 1 when age is 24, i want both unqiue id 2 at age 24s to have segment 1 but not have it at age 23.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For a more clear picture, heres what i am looking for the dataset to resemble:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Unique_Id          Age        Segment
1                  56         0
1                  57         4       
1                  57         4  
2                  23         0
2                  24         1        
2                  24         1
3                  77         2
3                  77         2
3                  78         0
3                  78         0
4                  86         0
4                  88         1.1
4                  88         1.1
5                  12         0
5                  12         0
5                  14         0
5                  14         0&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;My problem is that I don't even know where to start to do this. If anyone can provide help or tips it would be much appreciated. Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 13 Aug 2021 14:32:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761430#M240951</guid>
      <dc:creator>raddad34</dc:creator>
      <dc:date>2021-08-13T14:32:07Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761433#M240952</link>
      <description>&lt;P&gt;Compute the max segment and merge in with the other columns using PROC SQL. Does not work if segment is a negative number.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
    create table want as select a.unique_id,a.age,b.segment 
    from have as a left join 
    (select unique_id,age,max(segment) as segment from have group by unique_id,age) as b
    on a.unique_id=b.unique_id and a.age=b.age;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you really have to do this on a million records, it could be slow, and then maybe PROC SUMMARY is a better solution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please, for you future benefit, let's get the terminology right, a cell with a 0 is not an empty cell. It is a cell with a zero.&lt;/P&gt;</description>
      <pubDate>Fri, 13 Aug 2021 14:48:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761433#M240952</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-08-13T14:48:12Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761440#M240957</link>
      <description>&lt;P&gt;I think a Data step would be a good approach; a few million rows is nothing to a Data step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's some sample code, below, followed by the results.&amp;nbsp; Are these results what you want?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA	Have;
	INPUT
	Unique_ID          Age        Segment;
DATALINES;
1                  56         0
1                  57         4       
1                  57         0   
2                  23         0
2                  24         0        
2                  24         1
3                  77         0
3                  77         2
3                  78         0
3                  78         0
4                  86         0
4                  88         1.1
4                  88         0
5                  12         0
5                  12         0
5                  14         0
5                  14         0
;
RUN;

PROC	SORT	DATA=Have;
	BY	Unique_ID	Age	DESCENDING	Segment;
RUN;

DATA	Want;
	DROP	_:;
	SET	Have;
		BY	Unique_ID	Age;
	RETAIN	_Prior_Segment	0;

	IF	Segment					&amp;gt;	0	THEN
		DO;
			_Prior_Segment		=	Segment;
		END;
	ELSE
		DO;
			Segment				=	_Prior_Segment;
		END;

	OUTPUT;

	IF	LAST.Age						OR
		LAST.Unique_ID					THEN
		_Prior_Segment			=	0;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jimbarbour_0-1628867423497.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/62557i136038B3E800189E/image-size/large?v=v2&amp;amp;px=999" role="button" title="jimbarbour_0-1628867423497.png" alt="jimbarbour_0-1628867423497.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 13 Aug 2021 15:11:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761440#M240957</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2021-08-13T15:11:33Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761441#M240958</link>
      <description>&lt;P&gt;This doesn't work for unique_id=3 and age=77&lt;/P&gt;</description>
      <pubDate>Fri, 13 Aug 2021 15:00:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761441#M240958</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-08-13T15:00:50Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761443#M240959</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10892"&gt;@PaigeMiller&lt;/a&gt;, oh, I see what you're saying.&amp;nbsp; They&amp;nbsp;want &lt;EM&gt;previous&lt;/EM&gt; occurrences of an ID - Age combination to have the same Segment.&amp;nbsp; Thank you.&amp;nbsp; I think that could be corrected by a descending Sort on Segment.&amp;nbsp; Prior post adjusted accordingly.&amp;nbsp; The only "fly in the ointment" here is if there are multiple segments in a given age.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Jim&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 13 Aug 2021 15:09:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761443#M240959</guid>
      <dc:creator>jimbarbour</dc:creator>
      <dc:date>2021-08-13T15:09:42Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761450#M240960</link>
      <description>&lt;P&gt;Something like below should work.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data	have;
	input	unique_id age segment;
datalines;
1 56 0
1 57 4 
1 57 0 
2 23 0
2 24 0 
2 24 1
3 77 0
3 77 2
3 78 0
3 78 0
4 86 0
4 88 1.1
4 88 0
5 12 0
5 12 0
5 14 0
5 14 0
;

proc sort data=have out=want;
  by unique_id age descending segment;
run;

data want;
  set want(rename=(segment=_segment));
  by unique_id age;
  retain segment;
  if first.age then segment=_segment;
  drop _segment;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 13 Aug 2021 15:32:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761450#M240960</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2021-08-13T15:32:58Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761675#M241050</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA	Have;
	INPUT
	Unique_ID          Age        Segment;
DATALINES;
1                  56         0
1                  57         4       
1                  57         0   
2                  23         0
2                  24         0        
2                  24         1
3                  77         0
3                  77         2
3                  78         0
3                  78         0
4                  86         0
4                  88         1.1
4                  88         0
5                  12         0
5                  12         0
5                  14         0
5                  14         0
;
RUN;
proc sql;
create table want(drop=dummy) as
select unique_id,age,segment as dummy,max(segment) as segment
 from have
   group by unique_id,age;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 15 Aug 2021 12:21:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761675#M241050</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-08-15T12:21:05Z</dc:date>
    </item>
    <item>
      <title>Re: Filling empty cells based on unique id</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761737#M241080</link>
      <description>&lt;P&gt;Using a hash-object is missing the collection of solutions:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   set have;
   
   if _n_ = 1 then do;
      declare hash h(dataset: 'have(where=(Segment ^= 0))');
      h.defineKey('Unique_Id', 'Age');
      h.defineData('Segment');
      h.defineDone();
   end;
   
   rc = h.find();
   /* no need to check rc */
   drop rc;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Aug 2021 06:36:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Filling-empty-cells-based-on-unique-id/m-p/761737#M241080</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2021-08-16T06:36:17Z</dc:date>
    </item>
  </channel>
</rss>

