<?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: Multiply variables across datasets based on condition in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604052#M175075</link>
    <description>&lt;P&gt;Just for fun&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _two;
    if 0 then set one nobs=nobs;
    do i=1 to nobs;
        set two point=_N_;
        output;
    end;
    stop;
    drop i;
run;

proc fcmp; 
    array _1   {9, 4} / nosymbols;
    array _2   {9, 4} / nosymbols;
    array want {9, 4} / nosymbols;
    rc=read_array('one', _1);
    rc=read_array('_two', _2);
    call elemmult(_1, _2, want);
    rc=write_array('want', want);
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 14 Nov 2019 10:39:01 GMT</pubDate>
    <dc:creator>PeterClemmensen</dc:creator>
    <dc:date>2019-11-14T10:39:01Z</dc:date>
    <item>
      <title>Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604046#M175070</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I hope someone is able to help me with below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have two datasets: Dataset 1 contains raw data for a number of variables and dataset 2 contains a set of weights for the same variables. Example is shown below:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Dataset 1: Raw data&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;A&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;B&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;C&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;D&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;7&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;1&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Dataset 2: weights&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;B&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;A&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;D&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;C&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;TD&gt;0.4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to multiply all observations A in dataset 1 with the weight A in dataset 2. The same goes for variables B, C and D. The variables are though not listed in the same order. Can someone please help me with this?&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;*** Actual dataset contains a large number of variables, so solutions without manual calculation for each variable would be greatly appreciated***&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 09:26:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604046#M175070</guid>
      <dc:creator>Birgithj</dc:creator>
      <dc:date>2019-11-14T09:26:58Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604047#M175071</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want as 
select 
a * (select a from ds2) as product_a,
b * (select b from ds2) as product_b,
c * (select c from ds2) as product_c,
d * (select d from ds2) as product_d 
from ds1;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 09:22:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604047#M175071</guid>
      <dc:creator>sustagens</dc:creator>
      <dc:date>2019-11-14T09:22:30Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604048#M175072</link>
      <description>&lt;P&gt;Thank you for your answer.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do you know if this can be done without writing each calculation manually? I ask because I have a dataset containing 90 variables, and manual calculation will be very time consuming.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 09:25:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604048#M175072</guid>
      <dc:creator>Birgithj</dc:creator>
      <dc:date>2019-11-14T09:25:16Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604050#M175073</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;try this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Dataset1;
input A	B	C	D;
cards;
8	2	4	7
1	3	5	6
7	3	3	10
4	3	7	5
1	6	7	8
4	1	7	9
2	7	1	2
1	8	10	10
7	7	6	10
;
run; 

data Dataset2;
input B	A	D	C;
cards;
0.2	0.3	0.1	0.4
;
run;

data want;
  if 0 then set Dataset1; /* set vars order */

  array vars A--D;
  array weights[4] _temporary_;

  set Dataset2;
  do _I_ = lbound(vars) to hbound(vars); /* create temporary weights */
    weights[_I_] = vars[_I_] ;
  end;

  do until(eof); /* loop over dataset */
    set Dataset1 end=eof;

    do _I_ = lbound(vars) to hbound(vars); /* update values */
      vars[_I_] = vars[_I_] * weights[_I_];
    end;
    output;
  end;

  stop;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;All the best&lt;/P&gt;&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 09:46:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604050#M175073</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2019-11-14T09:46:15Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604051#M175074</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data one;
input A B C D;
datalines;
8 2 4 7
1 3 5 6
7 3 3 10
4 3 7 5
1 6 7 8
4 1 7 9
2 7 1 2
1 8 10 10
7 7 6 10
;
 
data two;
input B A D C;
datalines;
0.2 0.3 0.1 0.4
;

proc sql noprint;
    select name into :n separated by ' '
    from dictionary.columns
    where libname='WORK' and upcase(memname)=upcase('one');
quit;

data v_two / view=v_two;
    format &amp;amp;n.;
    set two;
run;

data want(drop=i j lr);
    format &amp;amp;n.;

    array v {4} &amp;amp;n.;
    array w {4} _temporary_;

    set v_two;
    do i=1 to dim(w);
        w[i]=v[i];
    end;

    do until (lr);
        set one;
        do j=1 to dim(v);
            v[j]=v[j]*w[j];
        end;
        output;
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;A    B    C    D
2.4  0.4  1.6  0.7
0.3  0.6  2 0. 6
2.1  0.6  1.2  1
1.2  0.6  2.8  0.5
0.3  1.2  2.8  0.8
1.2  0.2  2.8  0.9
0.6  1.4  0.4  0.2
0.3  1.6  4    1
2.1  1.4  2.4  1&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 10:02:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604051#M175074</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-14T10:02:21Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604052#M175075</link>
      <description>&lt;P&gt;Just for fun&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _two;
    if 0 then set one nobs=nobs;
    do i=1 to nobs;
        set two point=_N_;
        output;
    end;
    stop;
    drop i;
run;

proc fcmp; 
    array _1   {9, 4} / nosymbols;
    array _2   {9, 4} / nosymbols;
    array want {9, 4} / nosymbols;
    rc=read_array('one', _1);
    rc=read_array('_two', _2);
    call elemmult(_1, _2, want);
    rc=write_array('want', want);
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 10:39:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604052#M175075</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-14T10:39:01Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604054#M175076</link>
      <description>&lt;P&gt;Nice one,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;the only sad thing is you can't do:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _two / view = _two;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;because `read_array` falls...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;All the best&lt;/P&gt;&lt;P&gt;Bart&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 11:42:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604054#M175076</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2019-11-14T11:42:16Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604056#M175077</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/35763"&gt;@yabwon&lt;/a&gt;, yes, seems read_arrar sadly can't handle views.&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 11:44:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604056#M175077</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-14T11:44:33Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604057#M175078</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data one;
input A B C D;
datalines;
8 2 4 7
1 3 5 6
7 3 3 10
4 3 7 5
1 6 7 8
4 1 7 9
2 7 1 2
1 8 10 10
7 7 6 10
;
 
data two;
input B A D C;
datalines;
0.2 0.3 0.1 0.4
;
proc transpose data=one(obs=0) out=name;
var _all_;
run;
proc sql;
select cats(_name_,'=_',_name_) into : rename separated by ' ' from name;
select cats(_name_,'=',_name_,'*_',_name_) into : multi separated by ';' from name;
quit; 
data want ;
 set one;
 if _n_=1 then set two(rename=(&amp;amp;rename));
 &amp;amp;multi ;
drop _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 11:44:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604057#M175078</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-11-14T11:44:48Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604058#M175079</link>
      <description>&lt;P&gt;OR if you have IML which would get you faster .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data one;
input A B C D;
datalines;
8 2 4 7
1 3 5 6
7 3 3 10
4 3 7 5
1 6 7 8
4 1 7 9
2 7 1 2
1 8 10 10
7 7 6 10
;
 
data two;
input B A D C;
datalines;
0.2 0.3 0.1 0.4
;

proc iml;
use one;
read all var _all_ into one[c=vname1];
close;

use two;
read all var _all_ into two[c=vname2];
close;

mattrib two c=vname2 r={'x'};
want=one#two['X',vname1];
create want from want[c=vname1];
append from want;
close;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 11:48:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604058#M175079</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-11-14T11:48:37Z</dc:date>
    </item>
    <item>
      <title>Re: Multiply variables across datasets based on condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604065#M175081</link>
      <description>&lt;P&gt;I know it's solved, but found this interesting enough to share:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
   set dataset2;
   array nums {*} _numeric_;
   call execute ('data want; set dataset1;');
   do k=1 to dim(nums);
      formula = cats(vname(nums{k}), '=' , vname(nums{k}), '*', nums{k}, ';' ) ;
      call execute(formula);
   end;
   call execute('run;');
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 14 Nov 2019 12:22:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiply-variables-across-datasets-based-on-condition/m-p/604065#M175081</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-11-14T12:22:44Z</dc:date>
    </item>
  </channel>
</rss>

