<?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 Create matrices based on a reference table and separate data table in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423559#M3942</link>
    <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a parametrization table that mentions whether the (i,j) th element of "matrix 1" is zero, residual of the row sum or has to be read from the data table. I also have a data table with all the values for different segments. How do I construct the matrix?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example, let's say "param_table" is the parametrization table:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data param_table;
infile datalines dsd;
length FieldName $20 FieldSourceTable $20;
input Matrix_Id Column_Order Row_Order IsZero IsRowResidual IsColumnResidual FieldName	FieldSourceTable;
datalines;
1,    1,   1,	0,	1,	0,	.,		.
1,    1,   2,	0,	0,	0,	xyz,	table1
1,    1,   3,	0,	0,	0,	abc,	table1
1,    2,   1,	1,	0,	0,	.,		.
1,    2,   2,	0,	0,	0,	pqr,	table1
1,    2,   3,	0,	0,	0,	mno,	table1
1,    3,   1,	0,	0,	0,	ab,		table1
1,    3,   2,	0,	0,	0,	pq,		table1
1,    3,   3,	0,	1,	0,	.,		.
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Matrix_Id&lt;/TD&gt;&lt;TD&gt;Column_Order&lt;/TD&gt;&lt;TD&gt;Row_Order&lt;/TD&gt;&lt;TD&gt;IsZero&lt;/TD&gt;&lt;TD&gt;IsRowResidual&lt;/TD&gt;&lt;TD&gt;IsColumnResidual&lt;/TD&gt;&lt;TD&gt;FieldName&lt;/TD&gt;&lt;TD&gt;FieldSourceTable&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;table1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;table1&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;1&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;PQR&lt;/TD&gt;&lt;TD&gt;table1&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;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;MNO&lt;/TD&gt;&lt;TD&gt;table1&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;1&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;table1&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;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;PQ&lt;/TD&gt;&lt;TD&gt;table1&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;3&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;"table 1" is the actual data containing the values and references from earlier table:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data table1;
input Year (country method Segment) ( : $12.)
      ABC XYZ PQR MNO AB PQ;
datalines;
2017 France ABC Retail    0.2 0.5 0.4 0.3 0.6 0.1
2017 France XYZ Corporate 0.1 0.5 0.4 0.2 0.6 0.2
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;method&lt;/TD&gt;&lt;TD&gt;Segment&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;PQR&lt;/TD&gt;&lt;TD&gt;MNO&lt;/TD&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;PQ&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;2017&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;Retail&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.4&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;TD&gt;0.6&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;Corporate&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.4&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;TD&gt;0.6&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How do I create matrices with these rules for each row (each key set) in table 1? For example, matrix for row 1 of "table1" would be:&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;(1-ab)&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;ab&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;pqr&lt;/TD&gt;&lt;TD&gt;pq&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;mno&lt;/TD&gt;&lt;TD&gt;(1-abc-mno)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;therefore:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.4&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.6&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.5&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.4&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.3&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.6&lt;/FONT&gt;&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 added the excel file "param_table" which contains the references (the column names) and if it is zero or row residual. Also added the "table1" file which contains the actual values and for each row of "table1" we should have a matrix based on the rules mentioned in param_table.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 27 Dec 2017 04:36:25 GMT</pubDate>
    <dc:creator>ss59</dc:creator>
    <dc:date>2017-12-27T04:36:25Z</dc:date>
    <item>
      <title>Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423559#M3942</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a parametrization table that mentions whether the (i,j) th element of "matrix 1" is zero, residual of the row sum or has to be read from the data table. I also have a data table with all the values for different segments. How do I construct the matrix?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example, let's say "param_table" is the parametrization table:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data param_table;
infile datalines dsd;
length FieldName $20 FieldSourceTable $20;
input Matrix_Id Column_Order Row_Order IsZero IsRowResidual IsColumnResidual FieldName	FieldSourceTable;
datalines;
1,    1,   1,	0,	1,	0,	.,		.
1,    1,   2,	0,	0,	0,	xyz,	table1
1,    1,   3,	0,	0,	0,	abc,	table1
1,    2,   1,	1,	0,	0,	.,		.
1,    2,   2,	0,	0,	0,	pqr,	table1
1,    2,   3,	0,	0,	0,	mno,	table1
1,    3,   1,	0,	0,	0,	ab,		table1
1,    3,   2,	0,	0,	0,	pq,		table1
1,    3,   3,	0,	1,	0,	.,		.
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Matrix_Id&lt;/TD&gt;&lt;TD&gt;Column_Order&lt;/TD&gt;&lt;TD&gt;Row_Order&lt;/TD&gt;&lt;TD&gt;IsZero&lt;/TD&gt;&lt;TD&gt;IsRowResidual&lt;/TD&gt;&lt;TD&gt;IsColumnResidual&lt;/TD&gt;&lt;TD&gt;FieldName&lt;/TD&gt;&lt;TD&gt;FieldSourceTable&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;table1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;table1&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;1&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&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;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;PQR&lt;/TD&gt;&lt;TD&gt;table1&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;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;MNO&lt;/TD&gt;&lt;TD&gt;table1&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;1&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;table1&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;2&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;PQ&lt;/TD&gt;&lt;TD&gt;table1&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;3&lt;/TD&gt;&lt;TD&gt;FALSE&lt;/TD&gt;&lt;TD&gt;TRUE&lt;/TD&gt;&lt;TD&gt;FALSE&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;"table 1" is the actual data containing the values and references from earlier table:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data table1;
input Year (country method Segment) ( : $12.)
      ABC XYZ PQR MNO AB PQ;
datalines;
2017 France ABC Retail    0.2 0.5 0.4 0.3 0.6 0.1
2017 France XYZ Corporate 0.1 0.5 0.4 0.2 0.6 0.2
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Country&lt;/TD&gt;&lt;TD&gt;Year&lt;/TD&gt;&lt;TD&gt;method&lt;/TD&gt;&lt;TD&gt;Segment&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;PQR&lt;/TD&gt;&lt;TD&gt;MNO&lt;/TD&gt;&lt;TD&gt;AB&lt;/TD&gt;&lt;TD&gt;PQ&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;2017&lt;/TD&gt;&lt;TD&gt;ABC&lt;/TD&gt;&lt;TD&gt;Retail&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.4&lt;/TD&gt;&lt;TD&gt;0.3&lt;/TD&gt;&lt;TD&gt;0.6&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;2018&lt;/TD&gt;&lt;TD&gt;XYZ&lt;/TD&gt;&lt;TD&gt;Corporate&lt;/TD&gt;&lt;TD&gt;0.1&lt;/TD&gt;&lt;TD&gt;0.5&lt;/TD&gt;&lt;TD&gt;0.4&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;TD&gt;0.6&lt;/TD&gt;&lt;TD&gt;0.2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How do I create matrices with these rules for each row (each key set) in table 1? For example, matrix for row 1 of "table1" would be:&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;(1-ab)&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;ab&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;xyz&lt;/TD&gt;&lt;TD&gt;pqr&lt;/TD&gt;&lt;TD&gt;pq&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;abc&lt;/TD&gt;&lt;TD&gt;mno&lt;/TD&gt;&lt;TD&gt;(1-abc-mno)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;therefore:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.4&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.6&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.5&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.4&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.1&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.1&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.3&lt;/FONT&gt;&lt;/TD&gt;&lt;TD&gt;&lt;FONT color="#000000"&gt;0.6&lt;/FONT&gt;&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 added the excel file "param_table" which contains the references (the column names) and if it is zero or row residual. Also added the "table1" file which contains the actual values and for each row of "table1" we should have a matrix based on the rules mentioned in param_table.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Dec 2017 04:36:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423559#M3942</guid>
      <dc:creator>ss59</dc:creator>
      <dc:date>2017-12-27T04:36:25Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423568#M3943</link>
      <description>&lt;P&gt;Please post your data in the form of a DATA step. We&amp;nbsp;are happy to answer your questions, but&amp;nbsp;you need to make it easier to read your sample data in SAS.&amp;nbsp; If you don't know how to read the data, please ask that question in the Base SAS DATA step community.&lt;/P&gt;</description>
      <pubDate>Tue, 26 Dec 2017 12:11:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423568#M3943</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-12-26T12:11:28Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423571#M3944</link>
      <description>&lt;P&gt;Your expected answer does not seem to match your question:&lt;/P&gt;
&lt;P&gt;1. The [1,1[ and [3,3] are not specified in the parameterization table, yet you say you expect 0.2 and 0.3 for those values.&lt;/P&gt;
&lt;P&gt;2. The [2,2] cell is specified as 0.4 in the&amp;nbsp;&lt;SPAN&gt;parameterization table, yet you say you expect 0.35 for that value.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;With the information you've provided, I get&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure IML: X" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="c b header" colspan="3" scope="colgroup"&gt;X&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;0.5&lt;/TD&gt;
&lt;TD class="r data"&gt;0.2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;TD class="r data"&gt;0.4&lt;/TD&gt;
&lt;TD class="r data"&gt;0.3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;0.6&lt;/TD&gt;
&lt;TD class="r data"&gt;0.1&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 26 Dec 2017 12:20:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423571#M3944</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-12-26T12:20:21Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423573#M3945</link>
      <description>&lt;P&gt;Yes &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13684"&gt;@Rick_SAS&lt;/a&gt;, you are correct, I created the matrix wrongly. I have modified the post to correct my error. Basically for row order 2 and column order 1, the value is in "XYZ", which is 0.5 in row 1 of "table1". so (2,1)th element of the matrix would be 0.5 and so on.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also I have attached the sample excel files so that one doesn't have to create the data files themselves, it can be imported using this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC IMPORT OUT= WORK.param_table 
            DATAFILE= "your path" 
            DBMS=XLSX;
            sheet="sheet1"; 

RUN;

PROC IMPORT OUT= WORK.table1 
            DATAFILE= "your path" 
            DBMS=XLSX;
            sheet="sheet2"; 

RUN;

&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Also please find the excels attached again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Dec 2017 15:09:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423573#M3945</guid>
      <dc:creator>ss59</dc:creator>
      <dc:date>2017-12-26T15:09:37Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423602#M3946</link>
      <description>&lt;P&gt;I'm not going to argue with you, but there is a difference between including excel files and putting data in a DATA step. Many people cannot download excel files onto their work computers; their company forbids&amp;nbsp;it because of fear of viruses. What you should do is to create the SAS data set on your computer, then &lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_self"&gt;convert your SAS data set into a DATA step&lt;/A&gt;&amp;nbsp;and post the DATA step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The following&amp;nbsp;SAS/IML program should answer your questions.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc iml;
use have;  /* parameterization table */
read all var {Column_Order Row_Order FieldName};
close;

idx = loc(FieldName ^= " ");
refNames = FieldName[idx];
rows = Row_Order[idx];
cols = Column_Order[idx];

print rows cols refNames;
use Table1;
read all var refNames into Y;
close;

do i = 1 to nrow(Y);
   X = j(3,3,0);
   X[idx] = Y[i,];
   print X;
end;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;To generalize to more than one MATRIX_ID value, you can &lt;A href="https://blogs.sas.com/content/iml/2011/11/01/the-unique-loc-trick-a-real-treat.html" target="_self"&gt;use the UNIQUE-LOC technique to iterate over all values&lt;/A&gt; of the MATRIX_ID variable.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Dec 2017 16:29:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423602#M3946</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-12-26T16:29:14Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423626#M3947</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13684"&gt;@Rick_SAS&lt;/a&gt;. That works for reading the names from the file. However, I'm not being able to do the residual bit (assign 1 - sum of row to the elements as mentioned in the parametrisation table).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please find my code with data steps:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data param_table;
infile datalines dsd;
length FieldName $20 FieldSourceTable $20;
input Matrix_Id Column_Order Row_Order IsZero IsRowResidual IsColumnResidual FieldName	FieldSourceTable;
datalines;
1,    1,   1,	0,	1,	0,	.,		.
1,    1,   2,	0,	0,	0,	xyz,	table1
1,    1,   3,	0,	0,	0,	abc,	table1
1,    2,   1,	1,	0,	0,	.,		.
1,    2,   2,	0,	0,	0,	pqr,	table1
1,    2,   3,	0,	0,	0,	mno,	table1
1,    3,   1,	0,	0,	0,	ab,		table1
1,    3,   2,	0,	0,	0,	pq,		table1
1,    3,   3,	0,	1,	0,	.,		.
;

data table1;
input Year (country method Segment) ( : $12.)
      ABC XYZ PQR MNO AB PQ;
datalines;
2017 France ABC Retail    0.2 0.5 0.4 0.3 0.6 0.1
2017 France XYZ Corporate 0.1 0.5 0.4 0.2 0.6 0.2
;
run;

proc iml;
/*varNames =  {"Matrix_ID" "Column_Order" "Row_Order" "FieldName" "IsRowResidual" "IsColumnResidual" "FieldSourceTable"};*/
use param_table;  /* parameterization table */
read all var _all_;
close;

idx = loc(FieldName ^= " ");
rowsumx = loc(IsRowResidual=1);
refNames = FieldName[idx];
rows = Row_Order[idx];
cols = Column_Order[idx];

row_res = Row_Order[rowsumx];
col_res = Column_Order[rowsumx];

create residual var {row_res col_res};
append;

use residual;
read all var _all_ into res_mat;
close;

a = res_mat[,1];
b = res_mat[,2];


print idx,rows cols refNames;
use Table1;
read all var refNames into Y;
close;
PRINT Y,

do i = 1 to nrow(Y);
   X = j(3,3,0);
   X[idx] = Y[1,];
   rowsum = X[,+];
   temp = J(3,1)- X[,+];
 ** X[a,b] = temp[a,1]; /**----------- trying to assign the (a,b) th element to be  (1 - sum of all the elements in ath row) **/
  	end;
   print X;
end;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Appreciate your help!&lt;/P&gt;</description>
      <pubDate>Tue, 26 Dec 2017 19:46:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423626#M3947</guid>
      <dc:creator>ss59</dc:creator>
      <dc:date>2017-12-26T19:46:18Z</dc:date>
    </item>
    <item>
      <title>Re: Create matrices based on a reference table and separate data table</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423885#M3950</link>
      <description>&lt;P&gt;So if a diagonal element is zero, you want to replace it by (1 - sum(row))?&amp;nbsp; If so,&amp;nbsp;use&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
do i = 1 to nrow(Y);
   X = j(3,3,0);
   X[idx] = Y[i,];
   do j = 1 to 3;
      if X[j,j]=0 then X[j,j] = 1 - sum(X[j,]);
   end;
   print X;
end;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 28 Dec 2017 12:15:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Create-matrices-based-on-a-reference-table-and-separate-data/m-p/423885#M3950</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-12-28T12:15:57Z</dc:date>
    </item>
  </channel>
</rss>

