<?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: Permutation test - repeated measures ANOVA in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166920#M1621</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's a blog post that I wrote about this problem:&lt;/P&gt;&lt;P&gt;&lt;A href="http://blogs.sas.com/content/iml/2014/05/29/permute-elements-within-each-row-of-a-matrix/" title="http://blogs.sas.com/content/iml/2014/05/29/permute-elements-within-each-row-of-a-matrix/"&gt; Permute elements within each row of a matrix - The DO Loop&lt;/A&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 02 Jun 2014 12:30:40 GMT</pubDate>
    <dc:creator>Rick_SAS</dc:creator>
    <dc:date>2014-06-02T12:30:40Z</dc:date>
    <item>
      <title>Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166914#M1615</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am new to IML and permutation tests. I'm working on a permutation test for repeated measures ANOVA. Below is code to&lt;/P&gt;&lt;P&gt;create a sample dataset and IML code to run the permutation test.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My questions...&lt;/P&gt;&lt;P&gt;Am I totally off base with this?&lt;/P&gt;&lt;P&gt;Could I better vectorize the computations?&lt;/P&gt;&lt;P&gt;Any comments on the appropriateness of this method?&lt;/P&gt;&lt;P&gt;Any comments on whether or not it could be used with count data?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Many thanks,&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* create test dataset */&lt;/P&gt;&lt;P&gt;data test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; input t1-t3;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;45 50 55&lt;/P&gt;&lt;P&gt;42 42 45&lt;/P&gt;&lt;P&gt;36 41 43&lt;/P&gt;&lt;P&gt;39 35 40&lt;/P&gt;&lt;P&gt;51 55 59&lt;/P&gt;&lt;P&gt;44 49 56&lt;/P&gt;&lt;P&gt;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;proc iml;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; use test;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; read all into xobt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; close test;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* module to calculate F ratio */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; start fmod;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gmean = x[:];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* grand mean */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = nrow(x);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* number of rows/subjects */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k = ncol(x);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* number of columns/treatments */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tmeans = x[:,];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* treatment means */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; submeans = x[,:];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* subject means */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SSb */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSb = (tmeans-gmean)##2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSb = n*(SSb[+]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SSw */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSw = (tmeans-x)##2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSw = SSw[+,];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSw = SSw[+];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SSsub */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSsub = k*((submeans-gmean)##2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSsub = SSsub[+];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSerror = SSw-SSsub;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* SSerror */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSt = SSb/(k-1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* MSt */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSerror = SSerror/((n-1)*(k-1));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* MSerror */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F = MSt/MSerror;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* F statistic */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* calculate F for observed data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; x = xobt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; run fmod;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; fobt = F;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; print fobt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* permutation test */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; call randseed(1234);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; x = j(nrow(xobt),ncol(xobt));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* allocate matrix for permuted data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; B = 1000;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* number or reps */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; fdist = j(B,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* vector to hold bootstrap dist of F */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do j = 1 to B;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* bootstrap loop */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* permute each row */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i = 1 to n;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = xobt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q = ranperm(p[i,]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x[i,] = q;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run fmod;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* calculate F on permuted data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fdist[j,] = F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* store calculated F in fdist vector */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* compute p-value */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; pval = sum(fdist &amp;gt; abs(fobt)) / B;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; print pval;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* create dataset */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; create bootf var {fdist};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; append;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; close bootf;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 May 2014 22:12:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166914#M1615</guid>
      <dc:creator>jnvickery</dc:creator>
      <dc:date>2014-05-20T22:12:22Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166915#M1616</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If I get some time I'll look at this more closely, but for now look at pp 11-14 of &lt;A href="http://support.sas.com/resources/papers/proceedings10/329-2010.pdf"&gt;http://support.sas.com/resources/papers/proceedings10/329-2010.pdf&lt;/A&gt; to see an example of a matched pair permutation test. Not exactly what you are doing here, but some of the ideas might be helpful.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 May 2014 10:05:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166915#M1616</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-05-21T10:05:42Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166916#M1617</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks, Rick! My apologies. I should have mentioned in the original post that your paper was my starting point. I used the &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;ranperm&lt;/SPAN&gt; function instead of the randgen as in the paper to permute the rows of the matrix.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 May 2014 13:51:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166916#M1617</guid>
      <dc:creator>jnvickery</dc:creator>
      <dc:date>2014-05-21T13:51:37Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166917#M1618</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;First, welcome to the world of SAS/IML programming! You might be interested in these &lt;A href="http://blogs.sas.com/content/iml/2011/05/09/how-to-learn-sasiml-five-resources-for-the-beginner/"&gt;tips for beginners&lt;/A&gt;.&amp;nbsp;&amp;nbsp; I write a blog about statistical programming in SAS, and many of my posts are &lt;A href="http://blogs.sas.com/content/iml/tag/getting-started/"&gt;"Getting Started Examples."&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Second, you seem to be an excellent programmer. Your code is pretty good already, and you've clearly researched the problem and figured out the basics of the IML language.&amp;nbsp; I think you'll be an expert who answers OTHER people's questions before long!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here are some hints and suggestions that I think would improve the program:&lt;/P&gt;&lt;P&gt;1) Turn the FMOD module into a function with a &lt;A href="http://blogs.sas.com/content/iml/2013/04/29/understanding-local-and-global-variables-in-the-sasiml-language/"&gt;local symbol table&lt;/A&gt;. For example,&lt;/P&gt;&lt;P&gt;start fmod(x);&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return(F);&lt;/P&gt;&lt;P&gt;finish;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2) Vectorizing the inner loop (do i=1 to n) is tricky because there isn't a built-in SAS/IML function for "permute each row".&lt;/P&gt;&lt;P&gt;If your data sets are small, I would leave your code the way it is.&amp;nbsp; Only if you are dealing with many rows (large n) will you want to improve the efficiency.&amp;nbsp; If you are dealing with large n, or just want to learn more, read on. Otherwise, you're done.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The RANPERM function supports a second argument that specifies the number of permutations to return.&amp;nbsp; I would use this feature to vectorize the inner loop. Instead of permuting the ELEMENTS of p, permute the column indices {1 2 3}.&amp;nbsp; You then need to convert the COLUMN indices into MATRIX indices by adding a constant that depends on the row.&amp;nbsp; (See the article &lt;A href="http://blogs.sas.com/content/iml/2011/02/16/converting-matrix-subscripts-to-indices/"&gt;"Converting matrix subscripts to indices"&lt;/A&gt; for terminology and the computations.)&amp;nbsp; I wrapped these ideas into the function PermuteWithinRows that you can call from within the bootstrap loop. I've attached output to illustrate the process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt;use test; read all into xobt; close test;&lt;/P&gt;&lt;P&gt;/* independently permute elements of each row of a matrix */&lt;BR /&gt;start PermuteWithinRows(m);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; colIdx = ranperm(1:ncol(m), nrow(m));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /* generate matrix indices */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; f = (row(m) - 1) * ncol(m);&amp;nbsp; /* ROW fcn in 12.3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; matIdx = f + colIdx;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; *print colIdx " + " f " = " matIdx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return( shape(m[matIdx], nrow(m)) );&lt;BR /&gt;finish;&lt;/P&gt;&lt;P&gt;call randseed(1234);&lt;BR /&gt;x = PermuteWithinRows(xobt);&lt;BR /&gt;print xobt " ==&amp;gt; " x;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="permutewithinrows.png" class="jive-image jiveImage" src="https://communities.sas.com/legacyfs/online/6383_permutewithinrows.png" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 May 2014 14:45:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166917#M1618</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-05-21T14:45:23Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166918#M1619</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks so much! This is super helpful. Converting the module to a function and using matrix indices definitely improved the performance. The actual data to be used will likely have around 150 rows so I will apply your techniques. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks also for your encouragement and the link to the "Getting Started Examples". Much appreciated!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 May 2014 17:51:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166918#M1619</guid>
      <dc:creator>jnvickery</dc:creator>
      <dc:date>2014-05-21T17:51:17Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166919#M1620</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is sweet--it addresses a nagging problem I have had with the permutations in a hierarchical design problem as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Steve Denham&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 May 2014 14:14:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166919#M1620</guid>
      <dc:creator>SteveDenham</dc:creator>
      <dc:date>2014-05-23T14:14:17Z</dc:date>
    </item>
    <item>
      <title>Re: Permutation test - repeated measures ANOVA</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166920#M1621</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's a blog post that I wrote about this problem:&lt;/P&gt;&lt;P&gt;&lt;A href="http://blogs.sas.com/content/iml/2014/05/29/permute-elements-within-each-row-of-a-matrix/" title="http://blogs.sas.com/content/iml/2014/05/29/permute-elements-within-each-row-of-a-matrix/"&gt; Permute elements within each row of a matrix - The DO Loop&lt;/A&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Jun 2014 12:30:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Permutation-test-repeated-measures-ANOVA/m-p/166920#M1621</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-06-02T12:30:40Z</dc:date>
    </item>
  </channel>
</rss>

