<?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 how do I populate a new variable with the first non-null value from a group in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270787#M58237</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I would like to create a &lt;STRONG&gt;new dataset&lt;/STRONG&gt; with only 1 row for each ID. &amp;nbsp;I would like the first non-null value from the "field" variable to be placed into a new variable called "Animal". &amp;nbsp; I have included an example of my orginal dataset and my desired dataset below. &amp;nbsp;&lt;/SPAN&gt;What would be the best approach to create the desired dataset? &amp;nbsp;Thanks in advance for any help you can provide.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Original Dataset&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Field&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;hamster&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired Datset&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Animal&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;hamster&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;</description>
    <pubDate>Mon, 16 May 2016 21:15:34 GMT</pubDate>
    <dc:creator>macs</dc:creator>
    <dc:date>2016-05-16T21:15:34Z</dc:date>
    <item>
      <title>how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270787#M58237</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I would like to create a &lt;STRONG&gt;new dataset&lt;/STRONG&gt; with only 1 row for each ID. &amp;nbsp;I would like the first non-null value from the "field" variable to be placed into a new variable called "Animal". &amp;nbsp; I have included an example of my orginal dataset and my desired dataset below. &amp;nbsp;&lt;/SPAN&gt;What would be the best approach to create the desired dataset? &amp;nbsp;Thanks in advance for any help you can provide.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Original Dataset&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Field&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;hamster&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired Datset&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Animal&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;cat&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;dog&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;hamster&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;</description>
      <pubDate>Mon, 16 May 2016 21:15:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270787#M58237</guid>
      <dc:creator>macs</dc:creator>
      <dc:date>2016-05-16T21:15:34Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270792#M58239</link>
      <description>&lt;P&gt;Assuming you want to drop IDs that have no animal :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=original(where=(field is not missing)) 
	out=animals equals /* maintain original order within by-groups */;
by ID;
run;

data desired;
set animals; by ID;
if first.ID;
rename field=Animal;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 May 2016 21:56:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270792#M58239</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2016-05-16T21:56:49Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270795#M58240</link>
      <description>&lt;P&gt;If you have another "order" related variable such as date then sort by id and that other variable and use First.processing. If your original data order is important but you don't have such a variable then add one:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Data temp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set have (where= (field ne ''));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; order=_n_;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; animal=field&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The sort:&lt;/P&gt;
&lt;P&gt;Proc sort data=temp ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; by Id order;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;And First. processing&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; set temp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; by id order;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if first.id&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; keep id animal;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 16 May 2016 22:00:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270795#M58240</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-05-16T22:00:20Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270798#M58242</link>
      <description>&lt;P&gt;Updated my answer for brevity (as in PG's and Ksharp's posts) and included a second option which would be helpful for very large datasets:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;*Sample data;
data original;
infile datalines dlm="|" dsd;
input ID field $ @@;
datalines;
1||2|dog|3||2||1|cat|3|dog|1|cat|1||4|hamster|2|dog
;
run;

*Approach one: sorting and deduping by ID preserving the relative order;
proc sort 
	data = original (where=(field is not missing)) 
	out = result (rename=(field=animal)) 
	EQUALS NODUPKEY; 
	by ID; 
run;

*Aproach two: Using a hash table to pass once thru the data without having to sort beforehand;
data result2;
	set original;
	where ~missing(field);

	if _N_ = 1 then do;
		declare hash hAnimals();
		_rc = hAnimals.DefineKey('ID');
		_rc = hAnimals.DefineData('field');
		_rc = hAnimals.DefineDone();
		drop _rc;
	end;

	if hAnimals.find() then do;
		_rc = hAnimals.add();
		output;
	end;

	rename field=animal;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 17 May 2016 16:26:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270798#M58242</guid>
      <dc:creator>carlosmirandad</dc:creator>
      <dc:date>2016-05-17T16:26:46Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270837#M58247</link>
      <description>&lt;P&gt;Compress PG's code into one proc :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data original;
infile datalines dlm="|" dsd;
input ID field $ @@;
datalines;
1||2|dog|3||2||1|cat|3|dog|1|cat|1||4|hamster|2|dog
;
run;

proc sort data=original(where=(field is not missing)) out=want nodupkey; 
by ID;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 17 May 2016 01:28:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/270837#M58247</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-05-17T01:28:01Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271021#M58276</link>
      <description>&lt;P&gt;Short and sweet. That's great. I would just add the EQUALS option to ensure that order is preserved.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 17 May 2016 16:07:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271021#M58276</guid>
      <dc:creator>carlosmirandad</dc:creator>
      <dc:date>2016-05-17T16:07:33Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271031#M58278</link>
      <description>&lt;P&gt;Good idea. I add the EQUALS option when it's important, even if it is the default.&lt;/P&gt;</description>
      <pubDate>Tue, 17 May 2016 16:40:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271031#M58278</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2016-05-17T16:40:59Z</dc:date>
    </item>
    <item>
      <title>Re: how do I populate a new variable with the first non-null value from a group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271065#M58285</link>
      <description>&lt;P&gt;Me too. &amp;nbsp;I like to explicitly request the&amp;nbsp;options&amp;nbsp;that I need,&amp;nbsp;even if they are the default, just out of precaution. &amp;nbsp;If the NOSORTEQUALS system option was turned on for any reason, that would change the&amp;nbsp;default of the sort procedure. It also makes your intent more clear in the&amp;nbsp;code. Agree 100%&lt;/P&gt;</description>
      <pubDate>Tue, 17 May 2016 19:02:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-do-I-populate-a-new-variable-with-the-first-non-null-value/m-p/271065#M58285</guid>
      <dc:creator>carlosmirandad</dc:creator>
      <dc:date>2016-05-17T19:02:05Z</dc:date>
    </item>
  </channel>
</rss>

