<?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: Is there an easier way to do my do-loops? (it's within a macro) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114058#M23510</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think k = 10 would be a reasonable maximum. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 03 Jan 2013 22:57:22 GMT</pubDate>
    <dc:creator>kthenaj</dc:creator>
    <dc:date>2013-01-03T22:57:22Z</dc:date>
    <item>
      <title>Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114054#M23506</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am working on a macro in which I perform calculations on subsets of variables from a dataset. Below is the code and as you can see I've manually duplicated the subset calculations, I've done pairs, groups of 3, 4, 5. What I want to do is make my code a little easier so it handles any number of subsets. It works just fine the way it is, I just think there must be an easier/shorter/cleaner way. I am limited in that the output needs to have the same notation y_##, because as&amp;nbsp; you can see in the final lines a dataset is created just containing variables with the prefix "y_" because they are the only ones of interest in the end. Let me know if further explanation is needed (a sample data set is also supplied below). Thanks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;data pfisher;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;set fisher;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;/* pairs of two */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do i=1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j = b&amp;amp;i + b&amp;amp;j;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j = min&amp;amp;i + min&amp;amp;j;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j = max&amp;amp;i + max&amp;amp;j;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j = (py&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j)/(pymax&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%end; %end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;/* groups of 3 */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do i=1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l = (py&amp;amp;i&amp;amp;j&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;l)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;l);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%end; %end; %end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;/* groups of 4 */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do i=1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do m=&amp;amp;l+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l + b&amp;amp;m;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l + min&amp;amp;m;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l + max&amp;amp;m;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = (py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%end; %end; %end; %end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;/* groups of 5 */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do i=1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do m=&amp;amp;l+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%do n=&amp;amp;m+1 %to &amp;amp;k;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l + b&amp;amp;m +b&amp;amp;n;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l + min&amp;amp;m + min&amp;amp;n;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l + max&amp;amp;m + max&amp;amp;n;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = (py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;%end; %end; %end; %end; %end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;/**** need to extend to any possible subset size *****/&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;data pydefs;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;set pfisher;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;keep y_:;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is an example of a data set that the macro would be used on where k = 4 (and thus the group of 5 wouldn't be applicable):&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;data fisher;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; do i = 1 to 10;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; call streaminit(123);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; u1 = rand("Uniform");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; b1 = ceil(5*u1);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; min1 = ceil(3*u1);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; max1 = ceil(2*u1);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; call streaminit(456);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; u2 = rand("Uniform");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; b2 = ceil(5*u2);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; min2 = ceil(3*u2);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; max2 = ceil(2*u2);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; call streaminit(789);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; u3 = rand("Uniform");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; b3 = ceil(5*u3);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; min3 = ceil(3*u3);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; max3 = ceil(2*u3);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; call streaminit(235);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; u4 = rand("Uniform");&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; b4 = ceil(5*u4);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; min4 = ceil(3*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max4 = ceil(2*u4);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;drop u1 u2 u3 u4 i;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 19:32:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114054#M23506</guid>
      <dc:creator>kthenaj</dc:creator>
      <dc:date>2013-01-03T19:32:38Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114055#M23507</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Given your example data you end up with some cases where py..max equals py..min equals 0 and then is used as a divisor, resulting in a division by 0 warning and a missing value being assigned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is that the correct result or am I missing something?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 20:10:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114055#M23507</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-03T20:10:29Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114056#M23508</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, I didn't run that particular example data set before I posted. This should fix that problem:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data fisher;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i = 1 to 10;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(123);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u1 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b1 = ceil(5*u1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min1 = ceil(3*u1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max1 = ceil(2*u1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(456);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u2 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b2 = ceil(5*u2);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min2 = ceil(3*u2);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max2 = ceil(2*u2);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(789);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u3 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b3 = ceil(5*u3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min3 = ceil(3*u3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max3 = ceil(2*u3);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(235);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u4 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b4 = ceil(5*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min4 = ceil(3*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max4 = ceil(2*u4);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;drop u1 u2 u3 u4 i;&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;%macro test(k);&lt;/P&gt;&lt;P&gt;data pfisher;&lt;/P&gt;&lt;P&gt;set fisher;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* pairs of two */&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j = b&amp;amp;i + b&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j = min&amp;amp;i + min&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j = max&amp;amp;i + max&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j = (py&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j)/(pymax&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j+0.0001);&lt;/P&gt;&lt;P&gt;%end; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* groups of 3 */&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l;&lt;/P&gt;&lt;P&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l = (py&amp;amp;i&amp;amp;j&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;l)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;l+0.0001);&lt;/P&gt;&lt;P&gt;%end; %end; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* groups of 4 */&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do m=&amp;amp;l+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l + b&amp;amp;m;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l + min&amp;amp;m;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l + max&amp;amp;m;&lt;/P&gt;&lt;P&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m = (py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m+0.0001);&lt;/P&gt;&lt;P&gt;%end; %end; %end; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* groups of 5 */&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do j=&amp;amp;i+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do l=&amp;amp;j+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do m=&amp;amp;l+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;%do n=&amp;amp;m+1 %to &amp;amp;k;&lt;/P&gt;&lt;P&gt;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = b&amp;amp;i + b&amp;amp;j + b&amp;amp;l + b&amp;amp;m +b&amp;amp;n;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = min&amp;amp;i + min&amp;amp;j + min&amp;amp;l + min&amp;amp;m + min&amp;amp;n;&lt;/P&gt;&lt;P&gt;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = max&amp;amp;i + max&amp;amp;j + max&amp;amp;l + max&amp;amp;m + max&amp;amp;n;&lt;/P&gt;&lt;P&gt;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n = (py&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n)/(pymax&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;l&amp;amp;m&amp;amp;n+0.0001);&lt;/P&gt;&lt;P&gt;%end; %end; %end; %end; %end;&lt;/P&gt;&lt;P&gt;/**** need to extend to any possible subset size *****/&lt;/P&gt;&lt;P&gt; run;&lt;/P&gt;&lt;P&gt;data pydefs;&lt;/P&gt;&lt;P&gt;set pfisher;&lt;/P&gt;&lt;P&gt;keep y_:;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%test(k=4);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 20:35:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114056#M23508</guid>
      <dc:creator>kthenaj</dc:creator>
      <dc:date>2013-01-03T20:35:12Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114057#M23509</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="811441" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: You said that you would like it to work for any number of variables.&amp;nbsp; Is there a max number of variables that it should be able to work for?&amp;nbsp; I ask because, if there isn't, the code would be a little more complicated to develop.&amp;nbsp; If there is, what would that number be?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 22:51:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114057#M23509</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-03T22:51:15Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114058#M23510</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think k = 10 would be a reasonable maximum. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 22:57:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114058#M23510</guid>
      <dc:creator>kthenaj</dc:creator>
      <dc:date>2013-01-03T22:57:22Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114059#M23511</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I only took it out to six iterations, but you could easily expand it to 10.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The only things I really did was reduce the number of loops involved, used a proc sql call to identify the maximum number of variables, kept the %do variables to a range beginning with i, and limited whether code would run (and variables created) based on the maximum number of variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you wanted to generalize the code, you could write a fairly simple data _null_ step that wrote the code as an include file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*determine the value of k*/&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&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; memname="FISHER" and&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; upcase(name) like "MAX%"&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;%let maxvars=&amp;amp;sqlobs.;&lt;/P&gt;&lt;P&gt;%macro newtest;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data pfisher;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set fisher;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;maxvars. ge 2 %then %do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;maxvars.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do j=&amp;amp;i+1 %to &amp;amp;maxvars.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; py&amp;amp;i&amp;amp;j = b&amp;amp;i + b&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pymin&amp;amp;i&amp;amp;j = min&amp;amp;i + min&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pymax&amp;amp;i&amp;amp;j = max&amp;amp;i + max&amp;amp;j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y_&amp;amp;i&amp;amp;j = (py&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j)/(pymax&amp;amp;i&amp;amp;j-pymin&amp;amp;i&amp;amp;j+0.0001);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;maxvars. ge 3 %then %do k=&amp;amp;j+1 %to &amp;amp;maxvars.;&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; py&amp;amp;i&amp;amp;j&amp;amp;k = b&amp;amp;i + b&amp;amp;j + b&amp;amp;k;&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; pymin&amp;amp;i&amp;amp;j&amp;amp;k = min&amp;amp;i + min&amp;amp;j + min&amp;amp;k;&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; pymax&amp;amp;i&amp;amp;j&amp;amp;k = max&amp;amp;i + max&amp;amp;j + max&amp;amp;k;&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; y_&amp;amp;i&amp;amp;j&amp;amp;k = (py&amp;amp;i&amp;amp;j&amp;amp;k-pymin&amp;amp;i&amp;amp;j&amp;amp;k)/(pymax&amp;amp;i&amp;amp;j&amp;amp;k-pymin&amp;amp;i&amp;amp;j&amp;amp;k+0.0001);&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; %if &amp;amp;maxvars. ge 4 %then %do l=&amp;amp;k+1 %to &amp;amp;maxvars.;&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; py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l = b&amp;amp;i + b&amp;amp;j + b&amp;amp;k + b&amp;amp;l;&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; pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l = min&amp;amp;i + min&amp;amp;j + min&amp;amp;k + min&amp;amp;l;&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; pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l = max&amp;amp;i + max&amp;amp;j + max&amp;amp;k + max&amp;amp;l;&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_&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l = (py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l)/(pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l+0.0001);&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; %if &amp;amp;maxvars. ge 5 %then %do m=&amp;amp;l+1 %to &amp;amp;maxvars.;&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;&amp;nbsp;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m = b&amp;amp;i + b&amp;amp;j + b&amp;amp;k + b&amp;amp;l +b&amp;amp;m;&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;&amp;nbsp;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m = min&amp;amp;i + min&amp;amp;j + min&amp;amp;k + min&amp;amp;l + min&amp;amp;m;&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;&amp;nbsp;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m = max&amp;amp;i + max&amp;amp;j + max&amp;amp;k + max&amp;amp;l + max&amp;amp;m;&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;&amp;nbsp;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m = (py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m)/(pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m+0.0001);&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;&amp;nbsp;&amp;nbsp; %if &amp;amp;maxvars. ge 6 %then %do n=&amp;amp;m+1 %to &amp;amp;maxvars.;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n = b&amp;amp;i + b&amp;amp;j + b&amp;amp;k + b&amp;amp;l +b&amp;amp;m;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n = min&amp;amp;i + min&amp;amp;j + min&amp;amp;k + min&amp;amp;l + min&amp;amp;m + min&amp;amp;n;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n = max&amp;amp;i + max&amp;amp;j + max&amp;amp;k + max&amp;amp;l + max&amp;amp;m + max&amp;amp;n;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y_&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n = (py&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n)/(pymax&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n-pymin&amp;amp;i&amp;amp;j&amp;amp;k&amp;amp;l&amp;amp;m&amp;amp;n+0.0001);&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;&amp;nbsp;&amp;nbsp; %end;&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; %end;&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; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data pydefs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set pfisher;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep y_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;%mend newtest;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%newtest&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Jan 2013 23:44:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114059#M23511</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-03T23:44:07Z</dc:date>
    </item>
    <item>
      <title>Re: Is there an easier way to do my do-loops? (it's within a macro)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114060#M23512</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="811441" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Here is some code that will cover all possibilities.&amp;nbsp; You, of course, are responsible for insuring that it runs correctly.&amp;nbsp; It ran for me and appears to produce the same results as your original code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*specify input filename*/&lt;/P&gt;&lt;P&gt;%let fname=fisher;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*create some sample data*/&lt;/P&gt;&lt;P&gt;data &amp;amp;fname.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i = 1 to 10;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(123);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u1 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b1 = ceil(5*u1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min1 = ceil(3*u1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max1 = ceil(2*u1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(456);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u2 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b2 = ceil(5*u2);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min2 = ceil(3*u2);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max2 = ceil(2*u2);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(789);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u3 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b3 = ceil(5*u3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min3 = ceil(3*u3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max3 = ceil(2*u3);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call streaminit(235);&lt;/P&gt;&lt;P&gt;&amp;nbsp; u4 = rand("Uniform");&lt;/P&gt;&lt;P&gt;&amp;nbsp; b4 = ceil(5*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; min4 = ceil(3*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; max4 = ceil(2*u4);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;drop u1 u2 u3 u4 i;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*determine the value of maxvars*/&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table temp as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.columns&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="WORK" and&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; memname="%sysfunc(upcase(&amp;amp;fname.))" and&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; upcase(name) like "MAX%"&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;%let maxvars=&amp;amp;sqlobs.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*create the code*/&lt;/P&gt;&lt;P&gt;filename sascode temp;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length code stem part2 part3 part4 part5 end $255;&lt;/P&gt;&lt;P&gt;&amp;nbsp; file sascode;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i=105 to %eval(104+&amp;amp;maxvars.);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; part1=byte(i);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i eq 105 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part2='=1 %to &amp;amp;maxvars.;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stem=catt('&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part3=catt('=b&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part4=catt('=min&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part5=catt('=max&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end='%end;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='%macro create_code;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='data p&amp;amp;fname.;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='set &amp;amp;fname.;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part2=catt('=&amp;amp;',byte(i-1),'+1 %to &amp;amp;maxvars.;');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stem=catt(stem,'&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part3=catt(part3,'+b&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part4=catt(part4,'+min&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; part5=catt(part5,'+max&amp;amp;',byte(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end=catt(end,'%end;');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='%do '||part1||part2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i gt 105 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code=catt('py',stem,part3,';');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code=catt('pymin',stem,part4,';');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code=catt('pymax',stem,part5,';');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code=catt('y_',stem,'=(py',stem,'-pymin',stem,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ')/(pymax',stem,'-pymin',stem,'+0.0001);');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if i eq %eval(104+&amp;amp;maxvars.) then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='run;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; code='%mend create_code;';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put code;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&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;/*include and run the created code*/&lt;/P&gt;&lt;P&gt;%include sascode /source2;&lt;/P&gt;&lt;P&gt;%create_code&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data pydefs;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set p&amp;amp;fname.;;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep y_:;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 Jan 2013 01:11:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Is-there-an-easier-way-to-do-my-do-loops-it-s-within-a-macro/m-p/114060#M23512</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2013-01-05T01:11:30Z</dc:date>
    </item>
  </channel>
</rss>

