<?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: merge datasets and sum in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335011#M75730</link>
    <description>&lt;P&gt;Try&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table c as
select
  coalesce(a.group,b.group) as group,
  sum(a.c1,b.c1) as c1,
  sum(a.c2,b.c2) as c2,
  sum(a.c3,b.c3) as c3,
  sum(a.c4,b.c4) as c4
from a outer join b
  on a.group = b.group
;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If your variables are indexed like in your example (end with 1 .. 33), dynamically expanding the select list within a macro is rather simple.&lt;/P&gt;
&lt;P&gt;If not, you may have to read the variable names from sashelp.vcolumn so you can use call execute to create the SQL code dynamically.&lt;/P&gt;</description>
    <pubDate>Wed, 22 Feb 2017 16:13:14 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2017-02-22T16:13:14Z</dc:date>
    <item>
      <title>merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335007#M75726</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I got two tables A and B, which look like the following.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;table A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;group&lt;/TD&gt;&lt;TD&gt;c1&lt;/TD&gt;&lt;TD&gt;c2&lt;/TD&gt;&lt;TD&gt;c3&lt;/TD&gt;&lt;TD&gt;c4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;var&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;each&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;value&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;table B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;group&lt;/TD&gt;&lt;TD&gt;c1&lt;/TD&gt;&lt;TD&gt;c2&lt;/TD&gt;&lt;TD&gt;c3&lt;/TD&gt;&lt;TD&gt;c4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;var&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;each&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;home&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The results I want are a table which merges these two tables by variable group and sum the other variables. Results should be like table C,&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;table C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;group&lt;/TD&gt;&lt;TD&gt;c1&lt;/TD&gt;&lt;TD&gt;c2&lt;/TD&gt;&lt;TD&gt;c3&lt;/TD&gt;&lt;TD&gt;c4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;var&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;each&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;home&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;new&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;value&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;The real datasets are more complicated which contains thousands of observations and 33 variables. Can anyone help me out?&lt;BR /&gt;Appreciated&lt;/P&gt;</description>
      <pubDate>Wed, 22 Feb 2017 16:02:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335007#M75726</guid>
      <dc:creator>hx</dc:creator>
      <dc:date>2017-02-22T16:02:36Z</dc:date>
    </item>
    <item>
      <title>Re: merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335011#M75730</link>
      <description>&lt;P&gt;Try&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table c as
select
  coalesce(a.group,b.group) as group,
  sum(a.c1,b.c1) as c1,
  sum(a.c2,b.c2) as c2,
  sum(a.c3,b.c3) as c3,
  sum(a.c4,b.c4) as c4
from a outer join b
  on a.group = b.group
;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If your variables are indexed like in your example (end with 1 .. 33), dynamically expanding the select list within a macro is rather simple.&lt;/P&gt;
&lt;P&gt;If not, you may have to read the variable names from sashelp.vcolumn so you can use call execute to create the SQL code dynamically.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Feb 2017 16:13:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335011#M75730</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-02-22T16:13:14Z</dc:date>
    </item>
    <item>
      <title>Re: merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335114#M75782</link>
      <description>thank you kurtbremser, I think I have found a way to get my results.</description>
      <pubDate>Wed, 22 Feb 2017 20:28:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335114#M75782</guid>
      <dc:creator>hx</dc:creator>
      <dc:date>2017-02-22T20:28:52Z</dc:date>
    </item>
    <item>
      <title>Re: merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335122#M75789</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Proc summary is multi-threaded so this should be fast, I also combine data using a view

data tablea;
input group $ c1 c2 c3 c4;
cards4;
var 1 2 . 1
each . 3 . 2
value 4 5 4 .
new . 1 6 .
;;;;
run;quit;
data tableb;
input group $ c1 c2 c3 c4;
cards4;
var . 1 3 1
each . 1 2 1
home 2 4 1 1
new . 2 1 1
;;;;
run;quit;
data tableab/view=tableab;
set tablea tableb;
run;quit;
proc summary data=tableab sum;
class group;
var _numeric_;
output out=tablec sum=;
run;quit;
&amp;nbsp;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 22 Feb 2017 21:14:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335122#M75789</guid>
      <dc:creator>rogerjdeangelis</dc:creator>
      <dc:date>2017-02-22T21:14:54Z</dc:date>
    </item>
    <item>
      <title>Re: merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335197#M75834</link>
      <description>&lt;P&gt;Can't we use datastep merge statement to accomplish the same..??&lt;/P&gt;</description>
      <pubDate>Thu, 23 Feb 2017 04:09:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335197#M75834</guid>
      <dc:creator>Bhargav_Movva</dc:creator>
      <dc:date>2017-02-23T04:09:56Z</dc:date>
    </item>
    <item>
      <title>Re: merge datasets and sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335210#M75843</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/130581"&gt;@Bhargav_Movva&lt;/a&gt; wrote:&lt;BR /&gt;
&lt;P&gt;Can't we use datastep merge statement to accomplish the same..??&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Of course you can. But then you have to rename the variables of one dataset, so you can then use the coalesce function on the originally named variables from dataset A and the renamed variables from B. The data step does not have the a. and b. notation for variables that SQL has, and without a rename the values would simply overwrite in a not very predictable manner.&lt;/P&gt;
&lt;P&gt;Assume that the c1-c33 notation is in effect and the datasets are sorted by id:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro merge_it;
data C;
merge
  a
  b (rename=(
%do i = 1 %to 33;
  c&amp;amp;i.=_c&amp;amp;i.
%end;
  ))
;
by id;
%do i = 1 %to 33;
c&amp;amp;i. = coalesce(c&amp;amp;i.,_c&amp;amp;i.);
drop _c&amp;amp;i.;
%end;
run;
%mend;
%merge_it&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;A similar macro for the proc SQL would be simpler to write. Which way you go could be determined by performance in case of large datasets (SQL can be quite bad there).&lt;/P&gt;</description>
      <pubDate>Thu, 23 Feb 2017 07:50:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/merge-datasets-and-sum/m-p/335210#M75843</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-02-23T07:50:03Z</dc:date>
    </item>
  </channel>
</rss>

