<?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: Multiplying more than 100 pairs of columns in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/529000#M144464</link>
    <description>&lt;P&gt;Instead of using SQL to fetch the variable names, and arrays to process them, you can generate the code you need, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename tempsas temp;

data _null_;
  set funda2_df3;
  file tempsas;
  array vars1 tony--mike;
  do _N_=1 to dim(vars1);
    name=vname(vars1(_N_));
    put name +(-1) '_new =' name '* ' name +(-1) '_coeff;';
    end;
  stop;
run;

data funda2_df4;
  set funda2_df3;
  %include tempsas;
run; 
  &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;(Code is not tested, as you did not submit a data step to create test data)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But is this what you want? Apparently, your own code tries to calculate every new variable as the product of every combination of the two other variables. Meaning that the end result will be that every new variable will&amp;nbsp;end up containing the product MIKE*MIKE_COEFF.&lt;/P&gt;</description>
    <pubDate>Tue, 22 Jan 2019 09:01:14 GMT</pubDate>
    <dc:creator>s_lassen</dc:creator>
    <dc:date>2019-01-22T09:01:14Z</dc:date>
    <item>
      <title>Multiplying more than 100 pairs of columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528960#M144450</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I meet some difficulty when I try to write SAS codes. What I have is the following dataset:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;tony&lt;/TD&gt;&lt;TD&gt;amy&lt;/TD&gt;&lt;TD&gt;mike&lt;/TD&gt;&lt;TD&gt;tony_coeff&lt;/TD&gt;&lt;TD&gt;amy_coeff&lt;/TD&gt;&lt;TD&gt;mike_coeff&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I want to do is to multiply columns one by one, i.e: multiply&amp;nbsp;tony with tony_coeff,&amp;nbsp;&lt;SPAN&gt;multiply amy with amy_coeff:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;tony&lt;/TD&gt;&lt;TD&gt;amy&lt;/TD&gt;&lt;TD&gt;mike&lt;/TD&gt;&lt;TD&gt;tony_coeff&lt;/TD&gt;&lt;TD&gt;amy_coeff&lt;/TD&gt;&lt;TD&gt;mike_coeff&lt;/TD&gt;&lt;TD&gt;tony_new&lt;/TD&gt;&lt;TD&gt;amy_new&lt;/TD&gt;&lt;TD&gt;mike_new&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;9&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 more than 100 pairs of like this.&amp;nbsp; I am writing a code like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data funda2_df4;set funda2_df3;
array vars3{0:99} tony_new-mike_new;
array vars1 tony--mike;
array vars2 tony_coeff--mike_coeff;
do _m = 1 to dim(vars3);
do _i = 1 to dim(vars1);
do _j = 1 to dim(vars2);
vars3[_m]=vars1[_i]*vars2[_j];
end;
end;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But it does not work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I will be very grateful if anyone can help me!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Many Thanks!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jan 2019 03:19:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528960#M144450</guid>
      <dc:creator>daradanye</dc:creator>
      <dc:date>2019-01-22T03:19:39Z</dc:date>
    </item>
    <item>
      <title>Re: Multiplying more than 100 pairs of columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528963#M144452</link>
      <description>&lt;P&gt;I think you're pretty close:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data funda2_df4;
set funda2_df3;

array vars3{0:99} tony_new-mike_new;
array vars1 tony--mike;
array vars2 tony_coeff--mike_coeff;

do i = 1 to dim(vars3);

    vars3[i] = vars1[i] * vars2[i];

end;

run;&lt;/PRE&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/32269"&gt;@daradanye&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I meet some difficulty when I try to write SAS codes. What I have is the following dataset:&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;id&lt;/TD&gt;
&lt;TD&gt;tony&lt;/TD&gt;
&lt;TD&gt;amy&lt;/TD&gt;
&lt;TD&gt;mike&lt;/TD&gt;
&lt;TD&gt;tony_coeff&lt;/TD&gt;
&lt;TD&gt;amy_coeff&lt;/TD&gt;
&lt;TD&gt;mike_coeff&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I want to do is to multiply columns one by one, i.e: multiply&amp;nbsp;tony with tony_coeff,&amp;nbsp;&lt;SPAN&gt;multiply amy with amy_coeff:&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;id&lt;/TD&gt;
&lt;TD&gt;tony&lt;/TD&gt;
&lt;TD&gt;amy&lt;/TD&gt;
&lt;TD&gt;mike&lt;/TD&gt;
&lt;TD&gt;tony_coeff&lt;/TD&gt;
&lt;TD&gt;amy_coeff&lt;/TD&gt;
&lt;TD&gt;mike_coeff&lt;/TD&gt;
&lt;TD&gt;tony_new&lt;/TD&gt;
&lt;TD&gt;amy_new&lt;/TD&gt;
&lt;TD&gt;mike_new&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;6&lt;/TD&gt;
&lt;TD&gt;12&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;8&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;12&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;
&lt;TD&gt;9&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 more than 100 pairs of like this.&amp;nbsp; I am writing a code like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data funda2_df4;set funda2_df3;
array vars3{0:99} tony_new-mike_new;
array vars1 tony--mike;
array vars2 tony_coeff--mike_coeff;
do _m = 1 to dim(vars3);
do _i = 1 to dim(vars1);
do _j = 1 to dim(vars2);
vars3[_m]=vars1[_i]*vars2[_j];
end;
end;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But it does not work.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will be very grateful if anyone can help me!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Many Thanks!&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jan 2019 03:35:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528963#M144452</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-01-22T03:35:44Z</dc:date>
    </item>
    <item>
      <title>Re: Multiplying more than 100 pairs of columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528968#M144454</link>
      <description>&lt;P&gt;I don't know that this type of array declaration would work either:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;array vars3{0:99} tony_new-mike_new;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You may need to manually type those out, and if so, you can use the same approach to create the avarialbe names as in my other answer:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql noprint;

select catx('_', name, "new") into :var_list
from sashelp.vcolumn 
where upper(libname) = 'WORK' and upper(memname) = 'yourDataSetName'
and varnum between 3 and 103;

quit;

%put &amp;amp;var_list;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jan 2019 03:42:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/528968#M144454</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2019-01-22T03:42:16Z</dc:date>
    </item>
    <item>
      <title>Re: Multiplying more than 100 pairs of columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/529000#M144464</link>
      <description>&lt;P&gt;Instead of using SQL to fetch the variable names, and arrays to process them, you can generate the code you need, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename tempsas temp;

data _null_;
  set funda2_df3;
  file tempsas;
  array vars1 tony--mike;
  do _N_=1 to dim(vars1);
    name=vname(vars1(_N_));
    put name +(-1) '_new =' name '* ' name +(-1) '_coeff;';
    end;
  stop;
run;

data funda2_df4;
  set funda2_df3;
  %include tempsas;
run; 
  &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;(Code is not tested, as you did not submit a data step to create test data)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But is this what you want? Apparently, your own code tries to calculate every new variable as the product of every combination of the two other variables. Meaning that the end result will be that every new variable will&amp;nbsp;end up containing the product MIKE*MIKE_COEFF.&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jan 2019 09:01:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/529000#M144464</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2019-01-22T09:01:14Z</dc:date>
    </item>
    <item>
      <title>Re: Multiplying more than 100 pairs of columns</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/529085#M144498</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/32269"&gt;@daradanye&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I meet some difficulty when I try to write SAS codes. What I have is the following dataset:&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;id&lt;/TD&gt;
&lt;TD&gt;tony&lt;/TD&gt;
&lt;TD&gt;amy&lt;/TD&gt;
&lt;TD&gt;mike&lt;/TD&gt;
&lt;TD&gt;tony_coeff&lt;/TD&gt;
&lt;TD&gt;amy_coeff&lt;/TD&gt;
&lt;TD&gt;mike_coeff&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you are involved in a similar project in the future you may have learned a lesson about normalized data. Instead of collecting&amp;nbsp; "across" if your data had been originally entered as&lt;/P&gt;
&lt;PRE&gt;ID NAME value Coef
1  Tony 2     1
1  Amy  3     2&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;then this would have been trivial as the multiplication would simply be value*coeff.&lt;/P&gt;
&lt;P&gt;This would also allow for additional names without changes to multiplication code. Your current data, assuming you ever have a need to add more people, likely will require additional processes.&lt;/P&gt;</description>
      <pubDate>Tue, 22 Jan 2019 15:37:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiplying-more-than-100-pairs-of-columns/m-p/529085#M144498</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-01-22T15:37:46Z</dc:date>
    </item>
  </channel>
</rss>

