<?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: PROC FCMP Subsection of Dynamic Array in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145301#M38623</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote" modifiedtitle="true"&gt;
&lt;P&gt;feyzi wrote:&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Hi Vince,&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;Sorry sure thing.&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;So I have 100,000 simulations of z values (from a standard normal distribution) for two categories (A, B), which look like this:&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="192"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;" width="64"&gt;LOB&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;SIM&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;Z&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-0.32659&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.450515&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;2&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1.542437&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;2&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.396981&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;3&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.259029&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;3&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.045685&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;4&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-0.55583&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;4&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.728347&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.77872&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-1.27385&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;I want to carry out a matrix multiplication of each of these simulations and the following correlation matrix table so I get correlated variables&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="128"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;" width="64"&gt;A&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align="right" height="17" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align="right" height="17" style="border: 0px solid black;"&gt;0.5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Seems like PROC SCORE might be what you want.&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt; &lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; sim;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;retain&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; _type_ &lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'SCORE'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa:&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$8.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; SIM:&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$1.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; Z;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;A 1 -0.32659&lt;BR /&gt;B 1 0.450515&lt;BR /&gt;A 2 1.542437&lt;BR /&gt;B 2 0.396981&lt;BR /&gt;A 3 0.259029&lt;BR /&gt;B 3 0.045685&lt;BR /&gt;A 4 -0.55583&lt;BR /&gt;B 4 0.728347&lt;BR /&gt;A 5 0.77872&lt;BR /&gt;B 5 -1.27385&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;transpose&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=_name_ &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;rename&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=(loa=_name_));&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; _type_ sim loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;var&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; z;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;id&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; core;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa :&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$8.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; A B;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;&amp;nbsp;&amp;nbsp; A 1&amp;nbsp; .5&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; B .5&amp;nbsp; 1&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;score&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=core &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;score&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=mult;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; sim;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;id&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;var&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; a b;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 18 Nov 2013 13:51:05 GMT</pubDate>
    <dc:creator>data_null__</dc:creator>
    <dc:date>2013-11-18T13:51:05Z</dc:date>
    <item>
      <title>PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145287#M38609</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was wondering if anyone knows a way of taking a dynamic array in PROC FCMP as such:&lt;/P&gt;&lt;P&gt;&lt;STRONG style="line-height: 1.5em; font-size: 10pt;"&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="line-height: 1.5em; font-size: 10pt;"&gt;PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUBROUTINE Y(SIM);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY Z[&amp;amp;S, 2] / NOSYMBOLS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RC2 = READ_ARRAY('COPULA', Z, 'SIM', 'Z');;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PUT Z=;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDSUB;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;QUIT;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;...and then taking a defined subsection of this to create a new dynamic array.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 10:24:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145287#M38609</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-15T10:24:32Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145288#M38610</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Could you be more specific about what you are trying to achieve and why? Complex matrix processing is a feature of proc IML much, much more than proc fcmp but depending on what all you wish to achieve, you might be able to program sub-arrays.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't think the call dynamic_array routine was designed to support selection of subarrays for scale-down. So I think you'd have to program a subroutine specific for your task or maybe look online for others that might have needed a similar feature.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 13:18:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145288#M38610</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-15T13:18:46Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145289#M38611</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Vince,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry sure thing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I have 100,000 simulations of z values (from a standard normal distribution) for two categories (A, B), which look like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="192"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="17" width="64"&gt;LOB&lt;/TD&gt;&lt;TD width="64"&gt;SIM&lt;/TD&gt;&lt;TD width="64"&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;A&lt;/TD&gt;&lt;TD align="right"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;-0.32659&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;B&lt;/TD&gt;&lt;TD align="right"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;0.450515&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;A&lt;/TD&gt;&lt;TD align="right"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;1.542437&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;B&lt;/TD&gt;&lt;TD align="right"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;0.396981&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;A&lt;/TD&gt;&lt;TD align="right"&gt;3&lt;/TD&gt;&lt;TD align="right"&gt;0.259029&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;B&lt;/TD&gt;&lt;TD align="right"&gt;3&lt;/TD&gt;&lt;TD align="right"&gt;0.045685&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;A&lt;/TD&gt;&lt;TD align="right"&gt;4&lt;/TD&gt;&lt;TD align="right"&gt;-0.55583&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;B&lt;/TD&gt;&lt;TD align="right"&gt;4&lt;/TD&gt;&lt;TD align="right"&gt;0.728347&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;A&lt;/TD&gt;&lt;TD align="right"&gt;5&lt;/TD&gt;&lt;TD align="right"&gt;0.77872&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="17"&gt;B&lt;/TD&gt;&lt;TD align="right"&gt;5&lt;/TD&gt;&lt;TD align="right"&gt;-1.27385&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to carry out a matrix multiplication of each of these simulations and the following correlation matrix table so I get correlated variables&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="128"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="17" width="64"&gt;A&lt;/TD&gt;&lt;TD width="64"&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="17"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;0.5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="17"&gt;0.5&lt;/TD&gt;&lt;TD align="right"&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I can do this with the code below but my problem is because there's a lot of reading and writing going on for 100,000 simulations my run-time is way too long.So I thought a better way would be to read in the Z variable in COPULA table into an array, take each simulation at a time (this is the bit where I want to take the subsection of the Z array), multiply with the correlation matrix, then append each output array on top of previous ones. Do all of this in temporary arrays and then once complete, write the final array containing the correlated values once.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I would have to take a subsection of an array and be able append two arrays as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any other alternative suggestions also most welcome! Unfortunately I don't have PROC IML so have to do with other means. I hope&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot for the time!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA COPULA (KEEP=LOB_LT_UW SIM Z)&lt;/P&gt;&lt;P&gt;&amp;nbsp; CORR (DROP=LOB_LT_UW SIM Z);&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET CORR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; OUTPUT CORR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DO SIM = 1 TO 100;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Z = NORMAL(123);&lt;/P&gt;&lt;P&gt;&amp;nbsp; OUTPUT COPULA;&lt;/P&gt;&lt;P&gt;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC SORT DATA=COPULA;&lt;/P&gt;&lt;P&gt;&amp;nbsp; BY SIM LOB_LT_UW;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA _NULL_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET CORR END=LASTOBS;&lt;/P&gt;&lt;P&gt;&amp;nbsp; IF LASTOBS THEN CALL SYMPUT('R',_N_) ;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SUBROUTINE MMULT(SIM);&lt;/P&gt;&lt;P&gt;&amp;nbsp; ARRAY Y[&amp;amp;R]; OUTARGS Y;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ARRAY CORR[&amp;amp;R,&amp;amp;R] / NOSYMBOLS;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ARRAY Z[&amp;amp;R] / NOSYMBOLS;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; RC1 = READ_ARRAY('CORR', CORR);&lt;/P&gt;&lt;P&gt;&amp;nbsp; RC2 = READ_ARRAY('Z', Z, 'Z');&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; CALL MULT(Z, CORR, Y);&lt;/P&gt;&lt;P&gt;&amp;nbsp; RC3 = WRITE_ARRAY('Y', Y, 'Y');&lt;/P&gt;&lt;P&gt;&amp;nbsp; ENDSUB;&lt;/P&gt;&lt;P&gt;QUIT;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OPTIONS CMPLIB=WORK.FUNCS;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%MACRO MMULT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %DO N = 1 %TO 100;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATA Z;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET COPULA (WHERE=(SIM=&amp;amp;N));&lt;/P&gt;&lt;P&gt;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATA _NULL_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET Z;&lt;/P&gt;&lt;P&gt;&amp;nbsp; CALL MMULT(SIM);&lt;/P&gt;&lt;P&gt;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATA TMP;&lt;/P&gt;&lt;P&gt;&amp;nbsp; MERGE Z Y;&lt;/P&gt;&lt;P&gt;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; PROC SORT DATA=COPULA;&lt;/P&gt;&lt;P&gt;&amp;nbsp; BY SIM LOB_LT_UW;&lt;/P&gt;&lt;P&gt;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATA COPULA;&lt;/P&gt;&lt;P&gt;&amp;nbsp; MERGE COPULA TMP;&lt;/P&gt;&lt;P&gt;&amp;nbsp; BY SIM LOB_LT_UW;&lt;/P&gt;&lt;P&gt;&amp;nbsp; RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; %END;&lt;/P&gt;&lt;P&gt;%MEND;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%MMULT;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 14:20:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145289#M38611</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-15T14:20:02Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145290#M38612</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Seems like you could do that in one pass of the data.&amp;nbsp; I don't know CALL MMULT so perhaps you might have to abandon that and just do matrix multiplication directly, but does it really require dynamic arrays?&amp;nbsp; Just use BY group and perform the same operation once per by group on a fixed array.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 15:07:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145290#M38612</guid>
      <dc:creator>snoopy369</dc:creator>
      <dc:date>2013-11-15T15:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145291#M38613</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Before I forget since this is partly off topic,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I suggest you use RAND function instead of RANNORM (or equivalently NORMAL) function. Read&lt;/P&gt;&lt;P&gt;C:\Users\martvin\Desktop\Six reasons you should stop using the RANUNI function to generate random numbers - The DO Loop.htm&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for implementation details and the less-random aspect of older RAN&amp;lt;distribution name&amp;gt; functions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm looking at the code real quick and will try to help out&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 16:08:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145291#M38613</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-15T16:08:04Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145292#M38614</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FYI - the non-c: link to that post is here:&lt;/P&gt;&lt;P&gt;&lt;A href="http://blogs.sas.com/content/iml/2013/07/10/stop-using-ranuni/" title="http://blogs.sas.com/content/iml/2013/07/10/stop-using-ranuni/"&gt; Six reasons you should stop using the RANUNI function to generate random numbers - The DO Loop&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 16:38:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145292#M38614</guid>
      <dc:creator>snoopy369</dc:creator>
      <dc:date>2013-11-15T16:38:37Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145293#M38615</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Snoopy,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MMULT is the Subroutine that I define in the PROC FCMP statement. I've tried the code below, which uses a BY group in the DATA step but I can't get it to work. Would you be able point me in the right direction any chance?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hi Vince,&lt;/P&gt;&lt;P&gt;Thanks for the heads-up on the RAND function. Look forward to hearing from you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks guys!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;DATA COPULA (KEEP=LOB_LT_UW SIM Z Y)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CORR (DROP=LOB_LT_UW SIM Z Y);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET CORR END=LASTOBS;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF LASTOBS THEN CALL SYMPUT('R',_N_) ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT CORR;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO SIM = 1 TO 100;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z = RAND('NORMAL', 0, 1);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT COPULA;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;RUN;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROC SORT DATA=COPULA;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BY SIM LOB_LT_UW;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;RUN;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;DATA _NULL_;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET COPULA END=LASTOBS; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF LASTOBS THEN CALL SYMPUT('S',_N_) ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;RUN;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUBROUTINE MMULT(SIM);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY Z[&amp;amp;S] / NOSYMBOLS;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY CORR[&amp;amp;R,&amp;amp;R] / NOSYMBOLS;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY Y[&amp;amp;R]; OUTARGS Y;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RC1 = READ_ARRAY('CORR', CORR);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RC2 = READ_ARRAY('COPULA', Z, 'SIM', 'Z');;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MULT(Z, CORR, Y);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PUT Z=;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDSUB;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;QUIT;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;OPTIONS CMPLIB=WORK.FUNCS;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;DATA _NULL_;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET COPULA; BY SIM;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MMULT(SIM);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;RUN;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 17:11:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145293#M38615</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-15T17:11:48Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145294#M38616</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm mostly out of my depth here since I don't really know matrices very well (other than 'use IML' of course), but what I'm suggesting is writing MMULT to take as arguments all of the elements you want multiplied for one sim - it's a 2x2 array, right, so take as arguments eight values or whatever (in arrays or just as individual values), get all of those values on 1 row of a dataset, and call the function directly (once per by value, either from a dataset that is 1 record per sim, or at LAST.SIM) rather than trying to read from separate datasets.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Most of the time in SAS, any answer that can be done in a normal data step will be superior to any answer that goes off and reads things on its own.&amp;nbsp; I don't know matrices well enough to know what the potential issues are here, but it seems to me the straightforward answer should not be difficult.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 17:28:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145294#M38616</guid>
      <dc:creator>snoopy369</dc:creator>
      <dc:date>2013-11-15T17:28:01Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145295#M38617</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, let's make sure I understand properly here - you are looking to generate a multivariate normal variable N(mu, sigma) with sigma = (1 .5 , .5 1) so you generate two independant normal random vars and use the covar matrix to generate the resulting bivariate normal random variable? So in the end you wind up with a rescaled value X+.5Y in the same row as your X simulation and .5X+Y in the row of your Y simulation for each simulation pair.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As Snoopy pointed out, this can probably be done in moreorless a single pass of data which would save you tremendous amounts of time for processing. The bigger question would be do you need to build a generic process that will be able to further handle N-variate random variables or are you looking for a solution tailored to your problem?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A simple approach to save time if you don't need an expandable solution is to do everything in one line and hard the multiplication since its easy to achieve when N = 2 dimensions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;E.g.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do sim = 1 to 100;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z_A = rand('norm', 0, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z_B = rand('norm', 0, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W_A=Z_A+.5*Z_B;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W_B=.5*Z_A+Z_B;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run; /* you could use transpose if you really needed the bivariate data over 2 rows */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Assuming you want this to be somewhat generic, here's how I would approach the problem:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc fcmp OUTLIB=WORK.FUNCS.MATRIX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subroutine mmult(z {*,*}, corr {*,*}, y {*,*});&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outargs y;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call mult(z, corr, y);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endsub;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;options cmplib=work.funcs;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%macro multivarnormsim(numsim=, nvar=, corrmat= );&lt;BR /&gt;data want;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array z {&amp;amp;nvar.} z1-z&amp;amp;nvar.;&lt;BR /&gt;&amp;nbsp; array zz {1, &amp;amp;nvar.} _TEMPORARY_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array corr {&amp;amp;nvar., &amp;amp;nvar.} _temporary_ (&amp;amp;corrmat);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array w {&amp;amp;nvar.} w1-w&amp;amp;nvar.;&lt;BR /&gt;&amp;nbsp; array ww {1, &amp;amp;nvar.} _TEMPORARY_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to &amp;amp;numsim;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1 to dim(z);&lt;BR /&gt;&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;&amp;nbsp; z{j} = rand('norm', 0, 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zz{1, j}=z{j};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call mmult(zz, corr, ww);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1 to dim(w);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; w{j}=ww{1, j};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop i j;&lt;BR /&gt;run;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;%multivarnormsim(numsim=100, nvar=5, corrmat=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %quote( 1 0 0 0 .5,&lt;BR /&gt;&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1 .2 .2 0,&lt;BR /&gt;&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 .2 1 0&amp;nbsp; 0,&lt;BR /&gt;&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 .2 0 1 0,&lt;BR /&gt;&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;&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .5 0 0 0 1)&lt;BR /&gt;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; ); /*the nvar*nvar values could've been written in a single line it doesn't matter */&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 17:48:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145295#M38617</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-15T17:48:09Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145296#M38618</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Rofl thanks, I had had to save a copy to move it to closed network for my supervisor to read -_-. My bad on the local copy of Rick's blog post.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For the sake of it, I ran a 100K simulation pass on a windows vista / SAS9.2 slowpoke tower. Here's the log. Just opening and closing 100K without any processing would take substantially longer than that!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2971&amp;nbsp; %multivarnormsim(numsim=100000, nvar=2, corrmat=%quote(1 .5, .5 1));&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.WANT has 100000 observations and 4 variables.&lt;/P&gt;&lt;P&gt;NOTE: DATA statement used (Total process time):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.31 seconds&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.18 seconds&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Nov 2013 17:49:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145296#M38618</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-15T17:49:12Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145297#M38619</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks a lot Vince. It works beautifully!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FYI:&lt;/P&gt;&lt;P&gt;I was looking for a generic solution. At the moment I actually have 114 variables (ran in 2 mins 10 secs) but is open to change.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot again!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 16 Nov 2013 18:19:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145297#M38619</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-16T18:19:16Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145298#M38620</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Glad it helped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm guessing since you were already a FCMP user that it shouldn't be too difficult for you to figure out what the code does but if you needed explanation on some of the implementation details, feel free to ask. I usually put more comments in my codes on the forums but it has not always proven beneficial to others -_-&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Vince&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 12:29:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145298#M38620</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-18T12:29:29Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145299#M38621</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Vince,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's pretty straightforward to follow!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the final code. One thing I don't get is why the NVAR variable defined in the CALL SYMPUT won't work in the DATA step but if I add in the %LET NVAR = &amp;amp;NVAR, it works. Any thoughts?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Many thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA _NULL_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET CORREL NOBS=N;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL SYMPUT('NVAR',N);&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%LET NVAR = &amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROC FCMP OUTLIB=WORK.FUNCS.MATRIX;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SUBROUTINE MMULT(Z [*,*], Y [*,*]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTARGS Y;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY CORREL[&amp;amp;NVAR,&amp;amp;NVAR] / NOSYMBOLS;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RC1 = READ_ARRAY('CORREL', CORREL);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MULT(Z, CORREL, Y);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDSUB;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OPTIONS CMPLIB=WORK.FUNCS;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA COPULA;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY Z [&amp;amp;NVAR] Z1-Z&amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY ZZ [1, &amp;amp;NVAR] _TEMPORARY_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY Y [&amp;amp;NVAR] Y1-Y&amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY YY [1, &amp;amp;NVAR] _TEMPORARY_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY X [&amp;amp;NVAR] X1-X&amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY XX [1, &amp;amp;NVAR] _TEMPORARY_;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY U [&amp;amp;NVAR] U1-U&amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ARRAY UU [1, &amp;amp;NVAR] _TEMPORARY_;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; KEEP SIM U1-U&amp;amp;NVAR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO SIM=1 TO &amp;amp;SIMS;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO J=1 TO DIM(Z);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z&lt;J&gt; = RAND('NORM', 0, 1);&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ZZ[1, J] = Z&lt;J&gt;;&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MMULT(ZZ, YY);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO J=1 TO DIM(Y);&lt;/P&gt;&lt;P&gt;&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; Y&lt;J&gt; = YY[1, J];&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO J=1 TO DIM(X);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHI = RAND('CHISQ', &amp;amp;DOF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X&lt;J&gt; = Y&lt;J&gt; *&amp;nbsp; SQRT(&amp;amp;DOF) / SQRT(CHI);&lt;/J&gt;&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XX[1, J] = X&lt;J&gt;;&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO J=1 TO DIM(U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; U&lt;J&gt; = CDF('T', X&lt;J&gt;, &amp;amp;DOF);&lt;/J&gt;&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UU[1, J] = U&lt;J&gt;;&lt;/J&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OUTPUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 13:00:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145299#M38621</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-18T13:00:41Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145300#M38622</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hrm if you wanted to access &amp;amp;NVAR within the same data step in which the call symput was made, this is an issue with compilation vs execution. call symput statements create "piles" of macro statements that are only compiled after the execution of a given data step. Hence, &amp;amp;NVAR defined by the call symput only after the entire data step is run. This is similar, conceptually to how call execute macros are only ran after the data step making it impossible with this approach to use the results of the macro you executed with call execute within the same data step.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;With SAS 9.2+ it is possible to go around this issue with proc FCMP and run_macro but it is rarely necessary and requires a lot of wrapping. Most often it simply means that you either do not fully grasp compilation vs execution and the timing complexity between macro code and non-macro code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't think the %let NVAR=&amp;amp;NVAR; statement actually achieved anything in your case. It is normally only used if there were leading/trailing spaces in the macro variable and that you need to "strip" them because you deref (&amp;amp;) the macro variable in double quotes as a string within a data step/proc.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 13:23:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145300#M38622</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-18T13:23:01Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145301#M38623</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote" modifiedtitle="true"&gt;
&lt;P&gt;feyzi wrote:&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Hi Vince,&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;Sorry sure thing.&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;So I have 100,000 simulations of z values (from a standard normal distribution) for two categories (A, B), which look like this:&lt;/P&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="192"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;" width="64"&gt;LOB&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;SIM&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;Z&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-0.32659&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.450515&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;2&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1.542437&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;2&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.396981&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;3&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.259029&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;3&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.045685&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;4&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-0.55583&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;4&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.728347&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;A&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.77872&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;"&gt;B&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;-1.27385&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;I want to carry out a matrix multiplication of each of these simulations and the following correlation matrix table so I get correlated variables&lt;SPAN style="line-height: 1.5em; font-size: 10pt;"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="128"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD height="17" style="border: 0px solid black;" width="64"&gt;A&lt;/TD&gt;
&lt;TD style="border: 0px solid black;" width="64"&gt;B&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align="right" height="17" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;0.5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD align="right" height="17" style="border: 0px solid black;"&gt;0.5&lt;/TD&gt;
&lt;TD align="right" style="border: 0px solid black;"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="padding: 0px; min-height: 8pt;"&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Seems like PROC SCORE might be what you want.&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt; &lt;/DIV&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; sim;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;retain&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; _type_ &lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'SCORE'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa:&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$8.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; SIM:&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$1.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; Z;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;A 1 -0.32659&lt;BR /&gt;B 1 0.450515&lt;BR /&gt;A 2 1.542437&lt;BR /&gt;B 2 0.396981&lt;BR /&gt;A 3 0.259029&lt;BR /&gt;B 3 0.045685&lt;BR /&gt;A 4 -0.55583&lt;BR /&gt;B 4 0.728347&lt;BR /&gt;A 5 0.77872&lt;BR /&gt;B 5 -1.27385&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;transpose&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim(&lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=_name_ &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;rename&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=(loa=_name_));&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; _type_ sim loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;var&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; z;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;id&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; core;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa :&lt;/SPAN&gt;&lt;SPAN style="color: #008080; background-color: #ffffff;"&gt;$8.&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; A B;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;&amp;nbsp;&amp;nbsp; A 1&amp;nbsp; .5&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; B .5&amp;nbsp; 1&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;score&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;data&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=core &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;score&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=sim &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;out&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;=mult;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; sim;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;id&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; loa;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;var&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; a b;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 13:51:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145301#M38623</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-11-18T13:51:05Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145302#M38624</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Perfect again Vince.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA _NULL_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET CORREL NOBS=N;&lt;/P&gt;&lt;P&gt;&amp;nbsp; CALL SYMPUT('NVAR', STRIP(N));&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 15:04:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145302#M38624</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-18T15:04:35Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145303#M38625</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE __jive_macro_name="quote" class="jive_text_macro jive_macro_quote"&gt;
&lt;P&gt;Vince28@Statcan wrote:&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;call symput statements create "piles" of macro statements that are only compiled after the execution of a given data step.&lt;/P&gt;


&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;this statment is not correct.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CALL SYMPUT does its work when it is executed.&amp;nbsp;&amp;nbsp; You may be confusing CALL EXECUTE with SYMPUT but that statement is not exactly true for EXECUTE either.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 16:28:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145303#M38625</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2013-11-18T16:28:04Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145304#M38626</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Indeed.&amp;nbsp; Vince has it roughly backwards in his explanation - the issue is not that CALL SYMPUT is doing something at the wrong time, but that the use of the macro variable is often not done at the right time.&amp;nbsp; IE, in this data step:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data test;&lt;/P&gt;&lt;P&gt;set sashelp.class;&lt;/P&gt;&lt;P&gt;call symput('age',age);&lt;/P&gt;&lt;P&gt;x_&amp;amp;age. = age;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This doesn't work, not because the call symput runs after the x_&amp;amp;age statement, but because x_&amp;amp;age. needs to be able to set up during the compilation stage; CALL EXECUTE and the actual x_&amp;amp;age. assignment happen in the same timing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On the other hand,&lt;/P&gt;&lt;P&gt;data test;&lt;/P&gt;&lt;P&gt;set sashelp.class;&lt;/P&gt;&lt;P&gt;call symput('age',age);&lt;/P&gt;&lt;P&gt;array x_age[20];&lt;/P&gt;&lt;P&gt;x_age[symget('age')] = age;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This works because you don't need to know the value of &amp;amp;age until execution time.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Nov 2013 16:37:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145304#M38626</guid>
      <dc:creator>snoopy369</dc:creator>
      <dc:date>2013-11-18T16:37:19Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145305#M38627</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I stand corrected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'd like to add something to the thread. I was thinking back to your current implementation Emre and I think you would gain a lot of processing time if, instead of throwing that read_array within your mmult routine, you created a second routine just to load your copula matrix in a data step _temporary_ array and then passed that array to the mmult fcmp function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am almost positive that each mmult call does the read_array which requires an I/O operation for each of the 100K rows that could be saved by passing the array to the fcmp function instead. Again, I am not 100% sure about how fcmp and routine calls are handled in the data step. Maybe SAS optimized it so that static elements are read and kept in memory but I highly doubt it. Plus, seeing as I/O operations is really what was prohibitive in your original approach, this additional fix is in line with everything else that came with my original response.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope you get what I'm trying to say, if not and if you still care to further improve the algo, I can modify the code and post back at a later point in time.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Nov 2013 04:18:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145305#M38627</guid>
      <dc:creator>Vince28_Statcan</dc:creator>
      <dc:date>2013-11-22T04:18:29Z</dc:date>
    </item>
    <item>
      <title>Re: PROC FCMP Subsection of Dynamic Array</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145306#M38628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Vince,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I do know what you mean. I thought of implementing that originally but 2 minutes is well within my limit at the moment so it's a little lower on my list of things to do with the model.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a lot. You've really helped me out.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Emre&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Nov 2013 14:03:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-FCMP-Subsection-of-Dynamic-Array/m-p/145306#M38628</guid>
      <dc:creator>feyzi</dc:creator>
      <dc:date>2013-11-22T14:03:12Z</dc:date>
    </item>
  </channel>
</rss>

