<?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 missing in specific rows by groups in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670996#M201460</link>
    <description>&lt;P&gt;Thanks a lot.&amp;nbsp; It works.&lt;/P&gt;</description>
    <pubDate>Tue, 21 Jul 2020 14:04:32 GMT</pubDate>
    <dc:creator>karanfil</dc:creator>
    <dc:date>2020-07-21T14:04:32Z</dc:date>
    <item>
      <title>filling missing in specific rows by groups</title>
      <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670683#M201364</link>
      <description>&lt;P&gt;Hello All,&lt;BR /&gt;I need to fill in missing rows by groups( ticker, year) for the same person. Here how the data looks like and how I would like to have the data. I really appreciate your help. I have huge data set and can not do manually. Any code will be appreciate it. I use SAS 9.4&lt;/P&gt;&lt;P&gt;CURRENT&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT size="1"&gt;Ticker&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;year&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;Fname&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;Lname&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;aud&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;exec&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;com&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;nom&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT size="2"&gt;AB&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2012&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;P&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;G&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;&lt;FONT size="2"&gt;AB&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2012&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;P&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;G&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;X&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;X&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;X&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT size="2"&gt;AB&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2012&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;P&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;G&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;X&lt;/FONT&gt;&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;&lt;FONT size="2"&gt;DD&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2012&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;G&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;L&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;&lt;FONT size="2"&gt;DD&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2012&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;G&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;L&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;C&lt;/FONT&gt;&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;&lt;FONT size="2"&gt;EG&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2013&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;W&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;Z&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;&lt;FONT size="2"&gt;EG&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;2013&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;W&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;Z&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;FONT size="2"&gt;C&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&lt;FONT size="2"&gt;C&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;FONT size="2"&gt;DESIRED&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ticker&lt;/TD&gt;&lt;TD&gt;year&lt;/TD&gt;&lt;TD&gt;fname&lt;/TD&gt;&lt;TD&gt;lname&lt;/TD&gt;&lt;TD&gt;aud&lt;/TD&gt;&lt;TD&gt;exc&lt;/TD&gt;&lt;TD&gt;com&lt;/TD&gt;&lt;TD&gt;nom&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;P&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;P&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;P&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;TD&gt;X&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;DD&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;L&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;DD&lt;/TD&gt;&lt;TD&gt;2012&lt;/TD&gt;&lt;TD&gt;G&lt;/TD&gt;&lt;TD&gt;L&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&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;/TR&gt;&lt;TR&gt;&lt;TD&gt;EG&lt;/TD&gt;&lt;TD&gt;2013&lt;/TD&gt;&lt;TD&gt;W&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;EG&lt;/TD&gt;&lt;TD&gt;2013&lt;/TD&gt;&lt;TD&gt;W&lt;/TD&gt;&lt;TD&gt;Z&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2020 14:45:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670683#M201364</guid>
      <dc:creator>karanfil</dc:creator>
      <dc:date>2020-07-20T14:45:08Z</dc:date>
    </item>
    <item>
      <title>Re: filling missing in specific rows by groups</title>
      <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670692#M201368</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input (Ticker	year	Fname	Lname	aud	exec	com	nom) ($);
cards;
AB	2012	P	G	.	.	.	. 	 	 	 
AB	2012	P	G	X	. 	X	X
AB	2012	P	G	. 	X	. 	. 
DD	2012	G	L	.   .   .   . 	 	 	 
DD	2012	G	L	. 	C	. 	. 
EG	2013	W	Z	. 	. 	. 	. 
EG	2013	W	Z	. 	. 	C	C
;

proc sql;
create table want as
select Ticker,year,fname, lname,max(aud) as max,max(exec) as exec, max(com) as com, max(nom) as nom
from have
group by ticker, year;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Notes: Take advantage of autoremerge by not including fname,lname in group by&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2020 15:00:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670692#M201368</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-07-20T15:00:37Z</dc:date>
    </item>
    <item>
      <title>Re: filling missing in specific rows by groups</title>
      <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670737#M201390</link>
      <description>&lt;P&gt;This is one of those problem where you can take advantage of the LOCF (last observation carried forward) task supported by the UPDATE statement accompanied by the OBS=0 parameter and a BY statement.&amp;nbsp;&amp;nbsp;&amp;nbsp; Here LOCF means to bring forward the most recent non-missing value in the variables of interest, so by the end of the BY group (last record for a&amp;nbsp; given ticker/year) you have the variables of interest.&amp;nbsp; Then just re-read all the other variables for the same ticker/group and output:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (Ticker	year	Fname	Lname	aud	exec	com	nom) ($);
cards;
AB	2012	P	G	.	.	.	. 	 	 	 
AB	2012	P	G	X	. 	X	X
AB	2012	P	G	. 	X	. 	. 
DD	2012	G	L	.   .   .   . 	 	 	 
DD	2012	G	L	. 	C	. 	. 
EG	2013	W	Z	. 	. 	. 	. 
EG	2013	W	Z	. 	. 	C	C
;

data want;
  /* LOCF all variables not in the BY statement */
  update have (obs=0) have;
  by ticker year;

  /* At the end of the ticker/year, reread all the variables 
     original values, except those of LOCF interest*/
  if last.year then do until (last.year);
    set have (drop=aud exec com nom);
	by ticker year;
	output;
  end;
run;
  &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note this assumes your data are sorted by ticker/year, and that no variable of interest has more than 1 non-missing value for a given ticker/year.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This works because the 2nd reading of the dataset (i.e. in the loop starting with "if last.year then do until (last.year);") does NOT re-read the variables of interest (aud exec com nom) due to the DROP= parameter.&amp;nbsp; So they are preserved LOCF results produced by the first reading (in the UPDATE by-group).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now fname and lname in your data are constant, so keeping the last valid value for them wouldn't matter,&amp;nbsp; But if the fname or lname were to have changes, the code above preserves those changes (because fname and lname are not in the DROP= parameter).&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Jul 2020 17:59:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670737#M201390</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2020-07-20T17:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: filling missing in specific rows by groups</title>
      <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670995#M201459</link>
      <description>&lt;P&gt;Thanks a lot. It is great.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2020 14:02:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670995#M201459</guid>
      <dc:creator>karanfil</dc:creator>
      <dc:date>2020-07-21T14:02:29Z</dc:date>
    </item>
    <item>
      <title>Re: filling missing in specific rows by groups</title>
      <link>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670996#M201460</link>
      <description>&lt;P&gt;Thanks a lot.&amp;nbsp; It works.&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2020 14:04:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/filling-missing-in-specific-rows-by-groups/m-p/670996#M201460</guid>
      <dc:creator>karanfil</dc:creator>
      <dc:date>2020-07-21T14:04:32Z</dc:date>
    </item>
  </channel>
</rss>

