<?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: Appending columns when values are missing in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701363#M214767</link>
    <description>&lt;P&gt;Personally, I'm lazy and that won't scale if you have more tables or more variables. I'm using the table name as the VALUE_tableName but I think if your remove the ID statement it will number them. Depends on if you want to identify the source or are just ordering I suppose.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data long;
set table1 table2 table3 table4 indsname=source;
table = source;
run;

proc transpose data=long out=wide prefix=VALUE_;
by group;
id table;
var Value;
run;

*add zeroes in;
proc stdize data=wide out=want reponly missing=0;
var VALUE_:;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/279427"&gt;@mhoward2&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;I'm looking to create append the columns of 4 tables essentially based on one similar column. Each column has 2 fields: Group and Value. Here is an example of two tables and what I want the final table to look like:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Table B&lt;/P&gt;
&lt;TABLE width="295"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;TD width="39"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&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;And I want the final table to look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table Want&lt;/P&gt;
&lt;TABLE width="167"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;ValueA&lt;/TD&gt;
&lt;TD width="39"&gt;ValueB&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;PROC SQL;
CREATE TABLE WORK.TABLE WANT AS
SELECT t1.GROUP,
COALESCE(t1.VALUE, 0) AS VALUE1,
COALESCE(t2.VALUE, 0) AS VALUE2, 
COALESCE(t3.VALUE, 0) AS VALUE3,
COALESCE(t4.VALUE, 0) AS VALUE4
FROM WORK.TABLEA t1, WORK.TABLEB t2, WORK.TABLEC t3, WORK.TABLED t4
WHERE t1.GROUP = t2.GROUP AND t1.GROUP = t3.GROUP AND t1.GROUP = t4.GROUP
ORDER BY t1.GROUP;
QUIT;&lt;/PRE&gt;
&lt;P&gt;The problem appears when one table does have a group so it gets left off completely due to the where statement. Is there a way to solve this so no group gets left off and if it doesn't have a value just make it 0? Thanks in advance!&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 24 Nov 2020 21:01:56 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2020-11-24T21:01:56Z</dc:date>
    <item>
      <title>Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701357#M214762</link>
      <description>&lt;P&gt;I'm looking to create append the columns of 4 tables essentially based on one similar column. Each column has 2 fields: Group and Value. Here is an example of two tables and what I want the final table to look like:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Table B&lt;/P&gt;
&lt;TABLE width="295"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;TD width="39"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&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;And I want the final table to look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table Want&lt;/P&gt;
&lt;TABLE width="167"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;ValueA&lt;/TD&gt;
&lt;TD width="39"&gt;ValueB&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;PROC SQL;
CREATE TABLE WORK.TABLE WANT AS
SELECT t1.GROUP,
COALESCE(t1.VALUE, 0) AS VALUE1,
COALESCE(t2.VALUE, 0) AS VALUE2, 
COALESCE(t3.VALUE, 0) AS VALUE3,
COALESCE(t4.VALUE, 0) AS VALUE4
FROM WORK.TABLEA t1, WORK.TABLEB t2, WORK.TABLEC t3, WORK.TABLED t4
WHERE t1.GROUP = t2.GROUP AND t1.GROUP = t3.GROUP AND t1.GROUP = t4.GROUP
ORDER BY t1.GROUP;
QUIT;&lt;/PRE&gt;
&lt;P&gt;The problem appears when one table does have a group so it gets left off completely due to the where statement. Is there a way to solve this so no group gets left off and if it doesn't have a value just make it 0? Thanks in advance!&lt;/P&gt;</description>
      <pubDate>Tue, 24 Nov 2020 20:43:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701357#M214762</guid>
      <dc:creator>mhoward2</dc:creator>
      <dc:date>2020-11-24T20:43:11Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701361#M214765</link>
      <description>Have you tried changing your join type from a cross join to left joins?</description>
      <pubDate>Tue, 24 Nov 2020 20:56:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701361#M214765</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-11-24T20:56:18Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701362#M214766</link>
      <description>So: tableA left join tableB on (group = group)&lt;BR /&gt;But what if tableA doesnt have a group that tableB has? Wont a left join leave that one out?</description>
      <pubDate>Tue, 24 Nov 2020 20:59:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701362#M214766</guid>
      <dc:creator>mhoward2</dc:creator>
      <dc:date>2020-11-24T20:59:17Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701363#M214767</link>
      <description>&lt;P&gt;Personally, I'm lazy and that won't scale if you have more tables or more variables. I'm using the table name as the VALUE_tableName but I think if your remove the ID statement it will number them. Depends on if you want to identify the source or are just ordering I suppose.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data long;
set table1 table2 table3 table4 indsname=source;
table = source;
run;

proc transpose data=long out=wide prefix=VALUE_;
by group;
id table;
var Value;
run;

*add zeroes in;
proc stdize data=wide out=want reponly missing=0;
var VALUE_:;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/279427"&gt;@mhoward2&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;I'm looking to create append the columns of 4 tables essentially based on one similar column. Each column has 2 fields: Group and Value. Here is an example of two tables and what I want the final table to look like:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Table B&lt;/P&gt;
&lt;TABLE width="295"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;TD width="39"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;Value&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&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;And I want the final table to look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Table Want&lt;/P&gt;
&lt;TABLE width="167"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;Group&lt;/TD&gt;
&lt;TD width="64"&gt;ValueA&lt;/TD&gt;
&lt;TD width="39"&gt;ValueB&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp1&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Grp3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;PROC SQL;
CREATE TABLE WORK.TABLE WANT AS
SELECT t1.GROUP,
COALESCE(t1.VALUE, 0) AS VALUE1,
COALESCE(t2.VALUE, 0) AS VALUE2, 
COALESCE(t3.VALUE, 0) AS VALUE3,
COALESCE(t4.VALUE, 0) AS VALUE4
FROM WORK.TABLEA t1, WORK.TABLEB t2, WORK.TABLEC t3, WORK.TABLED t4
WHERE t1.GROUP = t2.GROUP AND t1.GROUP = t3.GROUP AND t1.GROUP = t4.GROUP
ORDER BY t1.GROUP;
QUIT;&lt;/PRE&gt;
&lt;P&gt;The problem appears when one table does have a group so it gets left off completely due to the where statement. Is there a way to solve this so no group gets left off and if it doesn't have a value just make it 0? Thanks in advance!&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 24 Nov 2020 21:01:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701363#M214767</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-11-24T21:01:56Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701364#M214768</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/279427"&gt;@mhoward2&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;So: tableA left join tableB on (group = group)&lt;BR /&gt;But what if tableA doesnt have a group that tableB has? Wont a left join leave that one out?&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then sounds like you want a full join, isn't it?&lt;/P&gt;</description>
      <pubDate>Tue, 24 Nov 2020 21:02:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701364#M214768</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-11-24T21:02:39Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701366#M214769</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data A;       
input Group $ Value;
datalines;
Grp1 1
Grp2 2
Grp3 3
;

data B;       
input Group $ Value;
datalines;
Grp1 2
Grp3 5
;

data want;
   if _N_ = 1 then do;
      dcl hash h (dataset : 'B');
      h.definekey('Group');
      h.definedata('Value');
      h.definedone();
   end;

   set A;

   if h.find() then Value = 0;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 24 Nov 2020 21:06:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701366#M214769</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-11-24T21:06:41Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701367#M214770</link>
      <description>Thank you very much for the reply! Im still learning a lot haha</description>
      <pubDate>Tue, 24 Nov 2020 21:16:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701367#M214770</guid>
      <dc:creator>mhoward2</dc:creator>
      <dc:date>2020-11-24T21:16:15Z</dc:date>
    </item>
    <item>
      <title>Re: Appending columns when values are missing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701368#M214771</link>
      <description>This is great! Thank you so much, worked perfectly and its simple. Really appreciate it</description>
      <pubDate>Tue, 24 Nov 2020 21:16:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Appending-columns-when-values-are-missing/m-p/701368#M214771</guid>
      <dc:creator>mhoward2</dc:creator>
      <dc:date>2020-11-24T21:16:47Z</dc:date>
    </item>
  </channel>
</rss>

