<?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: Fill missing values based on a common ID in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565501#M158792</link>
    <description>&lt;P&gt;Based on your sample data below could work.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines missover dsd dlm=',';
input FIRM_NAME $ SH_NAME $ HOLDING REVENUE PROFIT ASSETS EQUITY;
datalines;
A,A1,100,10,2,20,10
B,B1,17,
B,B2,17,100,40,50,,
B,B3,17,
B,B4,17,
B,B5,17,
B,B6,17,
;
proc sort data=have;
  by firm_name sh_name;
run;

%let firm_level_vars=REVENUE PROFIT ASSETS;

%let firm_level_vars2=%sysfunc(compbl(&amp;amp;firm_level_vars));
%let firm_level_vars2=%sysfunc(translate(&amp;amp;firm_level_vars2,%str(,),%str( )));
data want;
  merge 
    have(drop=&amp;amp;firm_level_vars) 
    have(keep=firm_name &amp;amp;firm_level_vars 
         where=(n(&amp;amp;firm_level_vars2)&amp;gt;0)
        )
    ;
  by firm_name;
run;

proc print data=want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 12 Jun 2019 10:40:06 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2019-06-12T10:40:06Z</dc:date>
    <item>
      <title>Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/564822#M158466</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Am fairly new to SAS and am encountering the following problem. Appreciate if someone could shed some light on it! &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a dataset which looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SH_NAME refers to the shareholders who own the firm while holding refers to the percentage ownership of the firm.&amp;nbsp;&lt;/P&gt;&lt;P&gt;REVENUE, PROFIT, ASSETS&amp;nbsp; &amp;amp; EQUITY figures are that of the firm total.&lt;/P&gt;&lt;P&gt;There are 20 other columns with such firm-level variables. For some variable, there is no info on it (e.g. Equity in the example below).&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;FIRM_NAME&lt;/TD&gt;&lt;TD&gt;SH_NAME&lt;/TD&gt;&lt;TD&gt;HOLDING&lt;/TD&gt;&lt;TD&gt;REVENUE&lt;/TD&gt;&lt;TD&gt;PROFIT&lt;/TD&gt;&lt;TD&gt;ASSETS&lt;/TD&gt;&lt;TD&gt;EQUITY&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;17&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;B&lt;/TD&gt;&lt;TD&gt;B2&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B3&lt;/TD&gt;&lt;TD&gt;17&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;B&lt;/TD&gt;&lt;TD&gt;B4&lt;/TD&gt;&lt;TD&gt;17&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;B&lt;/TD&gt;&lt;TD&gt;B5&lt;/TD&gt;&lt;TD&gt;17&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;B&lt;/TD&gt;&lt;TD&gt;B6&lt;/TD&gt;&lt;TD&gt;17&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;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way to fill in the missing blanks such that the final result will look like the following table?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;FIRM_NAME&lt;/TD&gt;&lt;TD&gt;SH_NAME&lt;/TD&gt;&lt;TD&gt;HOLDING&lt;/TD&gt;&lt;TD&gt;REVENUE&lt;/TD&gt;&lt;TD&gt;PROFIT&lt;/TD&gt;&lt;TD&gt;ASSETS&lt;/TD&gt;&lt;TD&gt;EQUITY&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;B1&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B2&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B3&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B4&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B5&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&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;B6&lt;/TD&gt;&lt;TD&gt;17&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;</description>
      <pubDate>Mon, 10 Jun 2019 07:32:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/564822#M158466</guid>
      <dc:creator>tyq1992</dc:creator>
      <dc:date>2019-06-10T07:32:42Z</dc:date>
    </item>
    <item>
      <title>Re: Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/564823#M158467</link>
      <description>&lt;P&gt;Here is one way&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines missover dsd dlm=',';
input FIRM_NAME $ SH_NAME $ HOLDING REVENUE PROFIT ASSETS EQUITY;
datalines;
A,A1,100,10,2,20,10
B,B1,17,
B,B2,17,100,40,50,,
B,B3,17,
B,B4,17,
B,B5,17,
B,B6,17,
;

data temp;
   update have(obs=0) have;
   by FIRM_NAME;
   output;
run;

proc sort data=temp;
   by FIRM_NAME descending SH_NAME; 
run;

data temp2;
   update temp(obs=0) temp;
   by FIRM_NAME;
   output;
run;

proc sort data=temp2 out=want;
   by FIRM_NAME SH_NAME; 
run;

proc datasets lib=work nolist;
   delete temp:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 10 Jun 2019 07:46:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/564823#M158467</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-06-10T07:46:29Z</dc:date>
    </item>
    <item>
      <title>Re: Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565469#M158775</link>
      <description>&lt;P&gt;Thanks for the suggestion!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, as i have c.20,000 rows (and around 10,000 blanks that needs to be filled based on the firm ID), writing out each line may take up quite some time, in which case Excel may be a better option to edit the cells?&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;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 12 Jun 2019 06:30:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565469#M158775</guid>
      <dc:creator>tyq1992</dc:creator>
      <dc:date>2019-06-12T06:30:32Z</dc:date>
    </item>
    <item>
      <title>Re: Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565471#M158776</link>
      <description>&lt;P&gt;I just took your sample data as an example here. My code can handle your 20.000 rows easily &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 12 Jun 2019 06:55:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565471#M158776</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-06-12T06:55:29Z</dc:date>
    </item>
    <item>
      <title>Re: Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565501#M158792</link>
      <description>&lt;P&gt;Based on your sample data below could work.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines missover dsd dlm=',';
input FIRM_NAME $ SH_NAME $ HOLDING REVENUE PROFIT ASSETS EQUITY;
datalines;
A,A1,100,10,2,20,10
B,B1,17,
B,B2,17,100,40,50,,
B,B3,17,
B,B4,17,
B,B5,17,
B,B6,17,
;
proc sort data=have;
  by firm_name sh_name;
run;

%let firm_level_vars=REVENUE PROFIT ASSETS;

%let firm_level_vars2=%sysfunc(compbl(&amp;amp;firm_level_vars));
%let firm_level_vars2=%sysfunc(translate(&amp;amp;firm_level_vars2,%str(,),%str( )));
data want;
  merge 
    have(drop=&amp;amp;firm_level_vars) 
    have(keep=firm_name &amp;amp;firm_level_vars 
         where=(n(&amp;amp;firm_level_vars2)&amp;gt;0)
        )
    ;
  by firm_name;
run;

proc print data=want;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 12 Jun 2019 10:40:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/565501#M158792</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-06-12T10:40:06Z</dc:date>
    </item>
    <item>
      <title>Re: Fill missing values based on a common ID</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/566097#M159042</link>
      <description>&lt;P&gt;Thanks! This worked fine for me! &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 14 Jun 2019 02:08:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Fill-missing-values-based-on-a-common-ID/m-p/566097#M159042</guid>
      <dc:creator>tyq1992</dc:creator>
      <dc:date>2019-06-14T02:08:03Z</dc:date>
    </item>
  </channel>
</rss>

