<?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: Summing across specific columns to create new columns in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958928#M374233</link>
    <description>&lt;P&gt;Appreciate not only the soln's offered, but also the sufficient explanation of what I was doing incorrectly. Cheers.&lt;/P&gt;</description>
    <pubDate>Tue, 11 Feb 2025 16:38:11 GMT</pubDate>
    <dc:creator>sas_user_1001</dc:creator>
    <dc:date>2025-02-11T16:38:11Z</dc:date>
    <item>
      <title>Summing across specific columns to create new columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958889#M374223</link>
      <description>&lt;P&gt;I have some data that looks the table below, except that my columns for each group (A, B) are over 1,000 and there's thousands of rows.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The operation that I want to perform is summing specific columns (e.g., A1 + B1, A2+B2, A3+B3) to get new columns in the table (C1,C2,C3). I would like to repeat this operation for all columns.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="border-collapse: collapse; width: 528pt;" border="0" width="704" cellspacing="0" cellpadding="0"&gt;&lt;COLGROUP&gt;&lt;COL style="width: 48pt;" span="11" width="64" /&gt; &lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD width="64" height="20" class="xl79" style="height: 15.0pt; width: 48pt;"&gt;Obs.&lt;/TD&gt;
&lt;TD width="64" class="xl71" style="border-left: none; width: 48pt;"&gt;&lt;STRONG&gt;A1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;A2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;A3&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;A4&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl73" style="width: 48pt;"&gt;&lt;STRONG&gt;A5&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;B1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;B2&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;B3&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl72" style="width: 48pt;"&gt;&lt;STRONG&gt;B4&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="64" class="xl73" style="width: 48pt;"&gt;&lt;STRONG&gt;B5&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;1&lt;/TD&gt;
&lt;TD class="xl74" style="border-top: none;"&gt;206&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;138&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;201&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;240&lt;/TD&gt;
&lt;TD class="xl76" style="border-top: none;"&gt;107&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;222&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;115&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;59&lt;/TD&gt;
&lt;TD class="xl75" style="border-top: none;"&gt;103&lt;/TD&gt;
&lt;TD class="xl76" style="border-top: none;"&gt;200&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;2&lt;/TD&gt;
&lt;TD class="xl65"&gt;85&lt;/TD&gt;
&lt;TD class="xl66"&gt;217&lt;/TD&gt;
&lt;TD class="xl66"&gt;33&lt;/TD&gt;
&lt;TD class="xl66"&gt;43&lt;/TD&gt;
&lt;TD class="xl67"&gt;138&lt;/TD&gt;
&lt;TD class="xl66"&gt;236&lt;/TD&gt;
&lt;TD class="xl66"&gt;66&lt;/TD&gt;
&lt;TD class="xl66"&gt;169&lt;/TD&gt;
&lt;TD class="xl66"&gt;126&lt;/TD&gt;
&lt;TD class="xl67"&gt;286&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;3&lt;/TD&gt;
&lt;TD class="xl65"&gt;35&lt;/TD&gt;
&lt;TD class="xl66"&gt;250&lt;/TD&gt;
&lt;TD class="xl66"&gt;255&lt;/TD&gt;
&lt;TD class="xl66"&gt;38&lt;/TD&gt;
&lt;TD class="xl67"&gt;292&lt;/TD&gt;
&lt;TD class="xl66"&gt;74&lt;/TD&gt;
&lt;TD class="xl66"&gt;140&lt;/TD&gt;
&lt;TD class="xl66"&gt;123&lt;/TD&gt;
&lt;TD class="xl66"&gt;23&lt;/TD&gt;
&lt;TD class="xl67"&gt;58&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;4&lt;/TD&gt;
&lt;TD class="xl65"&gt;245&lt;/TD&gt;
&lt;TD class="xl66"&gt;103&lt;/TD&gt;
&lt;TD class="xl66"&gt;135&lt;/TD&gt;
&lt;TD class="xl66"&gt;121&lt;/TD&gt;
&lt;TD class="xl67"&gt;56&lt;/TD&gt;
&lt;TD class="xl66"&gt;246&lt;/TD&gt;
&lt;TD class="xl66"&gt;82&lt;/TD&gt;
&lt;TD class="xl66"&gt;219&lt;/TD&gt;
&lt;TD class="xl66"&gt;230&lt;/TD&gt;
&lt;TD class="xl67"&gt;127&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;5&lt;/TD&gt;
&lt;TD class="xl65"&gt;34&lt;/TD&gt;
&lt;TD class="xl66"&gt;136&lt;/TD&gt;
&lt;TD class="xl66"&gt;190&lt;/TD&gt;
&lt;TD class="xl66"&gt;210&lt;/TD&gt;
&lt;TD class="xl67"&gt;167&lt;/TD&gt;
&lt;TD class="xl66"&gt;273&lt;/TD&gt;
&lt;TD class="xl66"&gt;144&lt;/TD&gt;
&lt;TD class="xl66"&gt;135&lt;/TD&gt;
&lt;TD class="xl66"&gt;150&lt;/TD&gt;
&lt;TD class="xl67"&gt;299&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;6&lt;/TD&gt;
&lt;TD class="xl65"&gt;41&lt;/TD&gt;
&lt;TD class="xl66"&gt;286&lt;/TD&gt;
&lt;TD class="xl66"&gt;58&lt;/TD&gt;
&lt;TD class="xl66"&gt;259&lt;/TD&gt;
&lt;TD class="xl67"&gt;25&lt;/TD&gt;
&lt;TD class="xl66"&gt;167&lt;/TD&gt;
&lt;TD class="xl66"&gt;6&lt;/TD&gt;
&lt;TD class="xl66"&gt;258&lt;/TD&gt;
&lt;TD class="xl66"&gt;20&lt;/TD&gt;
&lt;TD class="xl67"&gt;192&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;7&lt;/TD&gt;
&lt;TD class="xl65"&gt;295&lt;/TD&gt;
&lt;TD class="xl66"&gt;148&lt;/TD&gt;
&lt;TD class="xl66"&gt;237&lt;/TD&gt;
&lt;TD class="xl66"&gt;184&lt;/TD&gt;
&lt;TD class="xl67"&gt;267&lt;/TD&gt;
&lt;TD class="xl66"&gt;221&lt;/TD&gt;
&lt;TD class="xl66"&gt;128&lt;/TD&gt;
&lt;TD class="xl66"&gt;246&lt;/TD&gt;
&lt;TD class="xl66"&gt;29&lt;/TD&gt;
&lt;TD class="xl67"&gt;62&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;8&lt;/TD&gt;
&lt;TD class="xl65"&gt;82&lt;/TD&gt;
&lt;TD class="xl66"&gt;78&lt;/TD&gt;
&lt;TD class="xl66"&gt;282&lt;/TD&gt;
&lt;TD class="xl66"&gt;131&lt;/TD&gt;
&lt;TD class="xl67"&gt;165&lt;/TD&gt;
&lt;TD class="xl66"&gt;90&lt;/TD&gt;
&lt;TD class="xl66"&gt;258&lt;/TD&gt;
&lt;TD class="xl66"&gt;166&lt;/TD&gt;
&lt;TD class="xl66"&gt;48&lt;/TD&gt;
&lt;TD class="xl67"&gt;257&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl77" style="height: 15.0pt;"&gt;9&lt;/TD&gt;
&lt;TD class="xl65"&gt;277&lt;/TD&gt;
&lt;TD class="xl66"&gt;219&lt;/TD&gt;
&lt;TD class="xl66"&gt;139&lt;/TD&gt;
&lt;TD class="xl66"&gt;115&lt;/TD&gt;
&lt;TD class="xl67"&gt;230&lt;/TD&gt;
&lt;TD class="xl66"&gt;147&lt;/TD&gt;
&lt;TD class="xl66"&gt;166&lt;/TD&gt;
&lt;TD class="xl66"&gt;155&lt;/TD&gt;
&lt;TD class="xl66"&gt;219&lt;/TD&gt;
&lt;TD class="xl67"&gt;213&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR style="height: 15.0pt;"&gt;
&lt;TD height="20" class="xl78" style="height: 15.0pt;"&gt;10&lt;/TD&gt;
&lt;TD class="xl68"&gt;67&lt;/TD&gt;
&lt;TD class="xl69"&gt;240&lt;/TD&gt;
&lt;TD class="xl69"&gt;38&lt;/TD&gt;
&lt;TD class="xl69"&gt;255&lt;/TD&gt;
&lt;TD class="xl70"&gt;95&lt;/TD&gt;
&lt;TD class="xl69"&gt;166&lt;/TD&gt;
&lt;TD class="xl69"&gt;286&lt;/TD&gt;
&lt;TD class="xl69"&gt;270&lt;/TD&gt;
&lt;TD class="xl69"&gt;282&lt;/TD&gt;
&lt;TD class="xl70"&gt;20&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have tried crafting a small macro (see below), but I'm not getting the output I want as it keeps overwriting my previous column. Can someone help me diagnose my error, or offer a better way to approach this. Thanks&lt;/P&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;%macro sum;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; %local count;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; %let count = 1;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; %do i = 1 %to 500;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; data WANT;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; set HAVE;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; %put &amp;amp;count.;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; C_&amp;amp;count. = A_&amp;amp;count. + B_&amp;amp;count.;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; run;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; %let count = %eval(&amp;amp;count. + 1);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; %end;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;%mend sum;&lt;/DIV&gt;
&lt;DIV&gt;%sum&lt;/DIV&gt;</description>
      <pubDate>Mon, 10 Feb 2025 23:40:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958889#M374223</guid>
      <dc:creator>sas_user_1001</dc:creator>
      <dc:date>2025-02-10T23:40:56Z</dc:date>
    </item>
    <item>
      <title>Re: Summing across specific columns to create new columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958891#M374224</link>
      <description>&lt;P&gt;If you have, e.g., 1000 columns of each, then:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
array A {*} A1-A1000;
array B {*} B1-B1000;
array C {*} C1-C1000;
do i=1 to dim(A);
    C[i]=A[i]+B[i];
end;
drop i;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 11 Feb 2025 00:43:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958891#M374224</guid>
      <dc:creator>quickbluefish</dc:creator>
      <dc:date>2025-02-11T00:43:45Z</dc:date>
    </item>
    <item>
      <title>Re: Summing across specific columns to create new columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958896#M374226</link>
      <description>&lt;P&gt;Turn on the MPRINT option and looking at the generated SAS statements will make the mistake much more clear.&lt;/P&gt;
&lt;P&gt;You are generating code like:&lt;/P&gt;
&lt;LI-SPOILER&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT;
    set HAVE;
    C_1 = A_1 + B_1 ;
run;
data WANT;
    set HAVE;
    C_2 = A_2 + B_2 ;
run;
data WANT;
    set HAVE;
    C_3 = A_3 + B_3 ;
run;
 &lt;/CODE&gt;&lt;/PRE&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;But you want to generate code like this instead:&lt;/P&gt;
&lt;LI-SPOILER&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT;
    set HAVE;
    C_1 = A_1 + B_1 ;
    C_2 = A_2 + B_2 ;
    C_3 = A_3 + B_3 ;
run;
 &lt;/CODE&gt;&lt;/PRE&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;So you just need to change the placement of the macro %DO loop.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But really there is no need for the macro at all.&amp;nbsp; Just use ARRAY statements and you can do it all without any need for code generation.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data WANT;
    set HAVE;
    array A_[500];
    array B_[500];
    array C_[500];
    do i=1 to 500;
      C_[i] = A_[i] + B_[i];
    end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or restructure the data so that instead of one observation with 500 * 3 variables you just have 500 observations or 3 variables (plus id variables).&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data tall;
  input id i a b ;
cards;
1 1 206 222
1 2 138 115
1 3 201 59
1 4 240 103
1 5 107 200
2 1 85 236
2 2 217 66
2 3 33 169
2 4 43 126
2 5 138 286
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now creating C is simple.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
 set tall;
 c = a + b;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Tom_0-1739242505173.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/104518i2CFDF59DB72A3770/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Tom_0-1739242505173.png" alt="Tom_0-1739242505173.png" /&gt;&lt;/span&gt;&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>Tue, 11 Feb 2025 02:55:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958896#M374226</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2025-02-11T02:55:18Z</dc:date>
    </item>
    <item>
      <title>Re: Summing across specific columns to create new columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958928#M374233</link>
      <description>&lt;P&gt;Appreciate not only the soln's offered, but also the sufficient explanation of what I was doing incorrectly. Cheers.&lt;/P&gt;</description>
      <pubDate>Tue, 11 Feb 2025 16:38:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Summing-across-specific-columns-to-create-new-columns/m-p/958928#M374233</guid>
      <dc:creator>sas_user_1001</dc:creator>
      <dc:date>2025-02-11T16:38:11Z</dc:date>
    </item>
  </channel>
</rss>

