<?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: Looping with SAS IML in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290434#M2940</link>
    <description>&lt;P&gt;I don't have time to look at this right now, but your program will be greatly simplified if you get rid of the macro and use the&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BY code;&lt;/P&gt;
&lt;P&gt;statement in PROC VARMAX.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As a general rule it is hard to debug a complex macro. A useful tip is to develop your program as&amp;nbsp;open code and&amp;nbsp;set&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 2;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 3;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;to manually debug&amp;nbsp;each step of an iterative process.&lt;/P&gt;</description>
    <pubDate>Tue, 09 Aug 2016 12:32:09 GMT</pubDate>
    <dc:creator>Rick_SAS</dc:creator>
    <dc:date>2016-08-09T12:32:09Z</dc:date>
    <item>
      <title>Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290363#M2935</link>
      <description>&lt;P&gt;I am running a program that involves looping around some proc iml commands. The index variable I use is country code ('code'). The code is looking like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%MACRO Aggregate1;&lt;BR /&gt;&lt;BR /&gt;%DO i= 1 %TO 46;&lt;BR /&gt;&lt;BR /&gt;data Vart&amp;amp;i;&lt;BR /&gt;set Var1;&lt;BR /&gt;if code=&amp;amp;i;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;proc varmax data=Vart&amp;amp;i outest=est&amp;amp;i noprint;&lt;BR /&gt;model return TS / p=1&lt;BR /&gt;print=(estimates diagnose);&lt;BR /&gt;output out=VARR&amp;amp;i;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;data estt&amp;amp;i (drop = const);&lt;BR /&gt;set est&amp;amp;i;&lt;BR /&gt;if type="EST" then output;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;proc iml;&lt;BR /&gt;use estt&amp;amp;i;&lt;BR /&gt;read all var _num_ into Gamma&amp;amp;i[colname=varNames];&lt;BR /&gt;rho=0.99573468;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lambda&amp;amp;i=rho*Gamma&amp;amp;i*(inv(I(2)-rho*Gamma));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;e1={1, 0};&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;c&amp;amp;i=t(e1)+t(e1)*(lambda&amp;amp;i);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ec&amp;amp;i=(t(e1)+t(e1)*lambda&amp;amp;i)*(Gamma&amp;amp;i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;d&amp;amp;i=t(e1)*(lambda&amp;amp;i);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ed&amp;amp;i=t(e1)*(lambda&amp;amp;i)*(Gamma&amp;amp;i);&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create cc&amp;amp;i from c&amp;amp;i[colname={"h1&amp;amp;i" "h2&amp;amp;i"}];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;append from c&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;create dd&amp;amp;i from d&amp;amp;i[colname={"h11&amp;amp;i" "h12&amp;amp;i"}];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;append from d&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;create ecc&amp;amp;i from ec&amp;amp;i[colname={"h21&amp;amp;i" "h22&amp;amp;i"}];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;append from ec&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;create edd&amp;amp;i from ed&amp;amp;i[colname={"h31&amp;amp;i" "h32&amp;amp;i"}];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;append from ed&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;quit;&lt;BR /&gt;&lt;BR /&gt;data hi&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;merge Vart&amp;amp;i VARR&amp;amp;i(keep = res1 res2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;*make temp variable to merge first part of NCF and NDR *;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data hi1&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set hi&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;temp=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ind2 =. then delete;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data ccc&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set cc&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;temp=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data ddd&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set dd&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;temp=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data eccc&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set ecc&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;temp=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data eddd&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set edd&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;temp=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data final&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;merge hi1&amp;amp;i ccc&amp;amp;i ddd&amp;amp;i eccc&amp;amp;i eddd&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;by temp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;*estimate nc_indep_nosvol and nd_indep_nosvol;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data Final1&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;set Final&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;nc_ind_nosvol&amp;amp;i=h1&amp;amp;i*res1 + h2&amp;amp;i*res2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nd_ind_nosvol&amp;amp;i=h11&amp;amp;i*res1 + h22&amp;amp;i*res2 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ec_ind_nosvol&amp;amp;i=h21&amp;amp;i*lag(return) + h22&amp;amp;i*lag(TS);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ed_ind_nosvol&amp;amp;i=h31&amp;amp;i*lag(return) + h32&amp;amp;i*lag(TS);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data Final1A&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;set Final1&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if res1=. or res2=. then delete;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;run;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;*Appending Final Data*;&lt;BR /&gt;&lt;BR /&gt;proc datasets nolist;&lt;BR /&gt;append base=CV force data=Final1A&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%END;&lt;BR /&gt;&lt;BR /&gt;%mend; %Aggregate1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The original data (VAR1) I have attached to this message. The code works for one iteration, but it doesn't work if I put it in a looping format. I get the following error message:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR: (execution) Matrix has not been set to a value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The SAS log indicates everything before the proc iml portion of the code works, so the mistake must be in the proc iml section. Is there anything wrong there?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 09 Aug 2016 04:01:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290363#M2935</guid>
      <dc:creator>sykim</dc:creator>
      <dc:date>2016-08-09T04:01:38Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290368#M2936</link>
      <description>&lt;PRE&gt;
It is hard to give you some advice if you don't give us a TEST dataset.
&lt;/PRE&gt;</description>
      <pubDate>Tue, 09 Aug 2016 04:26:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290368#M2936</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-08-09T04:26:39Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290369#M2937</link>
      <description>&lt;P&gt;Here is the dataset I am using.&lt;/P&gt;</description>
      <pubDate>Tue, 09 Aug 2016 04:31:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290369#M2937</guid>
      <dc:creator>sykim</dc:creator>
      <dc:date>2016-08-09T04:31:38Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290387#M2938</link>
      <description>Sorry. I couldn't run PROC VARMAX .</description>
      <pubDate>Tue, 09 Aug 2016 08:31:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290387#M2938</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-08-09T08:31:09Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290391#M2939</link>
      <description>&lt;P&gt;HEre is the log file that I generated running the code. Clearly there is something wrong with the proc iml portion of the code. It looks like however the proc varmax is fine.&lt;/P&gt;</description>
      <pubDate>Tue, 09 Aug 2016 08:49:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290391#M2939</guid>
      <dc:creator>sykim</dc:creator>
      <dc:date>2016-08-09T08:49:42Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290434#M2940</link>
      <description>&lt;P&gt;I don't have time to look at this right now, but your program will be greatly simplified if you get rid of the macro and use the&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BY code;&lt;/P&gt;
&lt;P&gt;statement in PROC VARMAX.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As a general rule it is hard to debug a complex macro. A useful tip is to develop your program as&amp;nbsp;open code and&amp;nbsp;set&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 2;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;%LET i = 3;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;to manually debug&amp;nbsp;each step of an iterative process.&lt;/P&gt;</description>
      <pubDate>Tue, 09 Aug 2016 12:32:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290434#M2940</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2016-08-09T12:32:09Z</dc:date>
    </item>
    <item>
      <title>Re: Looping with SAS IML</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290455#M2941</link>
      <description>&lt;P&gt;I haven't tried to run your code, but I think the line:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;lambda&amp;amp;i=rho*Gamma&amp;amp;i*(inv(I(2)-rho*Gamma));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;might be the cause of the problem.&amp;nbsp;&amp;nbsp;Without the&amp;nbsp;&amp;amp;i suffix near the end,&amp;nbsp;I would expect&amp;nbsp;a message about&amp;nbsp;the matrix Gamma not being set.&lt;/P&gt;</description>
      <pubDate>Tue, 09 Aug 2016 13:20:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Looping-with-SAS-IML/m-p/290455#M2941</guid>
      <dc:creator>IanWakeling</dc:creator>
      <dc:date>2016-08-09T13:20:14Z</dc:date>
    </item>
  </channel>
</rss>

