<?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: Do loop macro in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385394#M277139</link>
    <description>&lt;P&gt;There's no such limit, as far as I know.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To turn long thin data sets into short wide data sets, the first tool I would consider is PROC TRANSPOSE. However ...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You haven't shown us what this short wide output data set should look like, so how could we help you?&lt;/P&gt;</description>
    <pubDate>Thu, 03 Aug 2017 16:59:43 GMT</pubDate>
    <dc:creator>PaigeMiller</dc:creator>
    <dc:date>2017-08-03T16:59:43Z</dc:date>
    <item>
      <title>Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385392#M277138</link>
      <description>&lt;P&gt;Hello SAS Experts,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a long and thin dataset of month end balances for each account which I am trying to shift to short and wide using the code below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;accountnumber&lt;/TD&gt;&lt;TD&gt;balmthend&lt;/TD&gt;&lt;TD&gt;MonthYYYYMM_date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;Jan-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Feb-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Mar-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;Jan-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;Feb-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;Mar-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;Apr-17&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, if I set max_months as any value over 255 SAS doesn't like it as it breaches the SQL limit I think.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do you know of a way I can adapt the code below and perhaps play around with a do loop?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help would be greatly appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Pete&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%let rep_mth=01Jan2017; *Reporting month;&lt;/P&gt;&lt;P&gt;%let max_months=300; *Set to allow max required months remaining in account lifetimes;&lt;/P&gt;&lt;P&gt;%let fee=35;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*Create dataset with single row per acc at desired obs month (Jan17);&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt; &lt;STRONG&gt;&lt;EM&gt;ead_vector&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table ead_&amp;amp;rep_mth as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select %do i = &lt;STRONG&gt;1&lt;/STRONG&gt; %to &amp;amp;max_months;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b&amp;amp;i.&lt;STRONG&gt;.B&lt;/STRONG&gt;alMthEnd as BalMthEnd_&amp;amp;i,&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; %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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.*&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from prep2_&amp;amp;rep_mth(where=(MonthYYYYMM_date=&lt;STRONG&gt;"&amp;amp;rep_mth."d&lt;/STRONG&gt;)) as a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i = &lt;STRONG&gt;1&lt;/STRONG&gt; %to &amp;amp;max_months;&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; left join&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; prep2_&amp;amp;rep_mth(where=(MonthYYYYMM_date=intnx('month',&lt;STRONG&gt;"&amp;amp;rep_mth."d&lt;/STRONG&gt;,&amp;amp;i,'b'))) as b&amp;amp;i&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; on a.accountnumber = b&amp;amp;i.&lt;STRONG&gt;.a&lt;/STRONG&gt;ccountnumber&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;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;%&lt;STRONG&gt;&lt;EM&gt;ead_vector&lt;/EM&gt;&lt;/STRONG&gt;;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Aug 2017 16:56:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385392#M277138</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-08-03T16:56:55Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385394#M277139</link>
      <description>&lt;P&gt;There's no such limit, as far as I know.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To turn long thin data sets into short wide data sets, the first tool I would consider is PROC TRANSPOSE. However ...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You haven't shown us what this short wide output data set should look like, so how could we help you?&lt;/P&gt;</description>
      <pubDate>Thu, 03 Aug 2017 16:59:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385394#M277139</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2017-08-03T16:59:43Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385396#M277140</link>
      <description>&lt;P&gt;Sorry, the short and wide datsaset should look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;accountnumber&lt;/TD&gt;&lt;TD&gt;balmthend_1&lt;/TD&gt;&lt;TD&gt;balmthend_2&lt;/TD&gt;&lt;TD&gt;balmthend_3&lt;/TD&gt;&lt;TD&gt;balmthend_4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Aug 2017 17:03:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385396#M277140</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-08-03T17:03:21Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385398#M277141</link>
      <description>&lt;P&gt;What will the resulting dataset look like for your example data?&lt;/P&gt;
&lt;P&gt;How is it different from using PROC TRANSPOSE?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;
  length accountnumber balmthend 8 MonthYYYYMM_date $8 ;
  input accountnumber balmthend MonthYYYYMM_date;
cards;
1 10 Jan-17
1 5 Feb-17
1 3 Mar-17
2 20 Jan-17
2 30 Feb-17
2 10 Mar-17
2 5 Apr-17
;
proc transpose data=have out=want (drop=_name_);
  by accountnumber;
  id MonthYYYYMM_date;
  var balmthend;
run;
proc print; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    accountnumber    Jan_17    Feb_17    Mar_17    Apr_17

 1           1            10         5         3         .
 2           2            20        30        10         5
&lt;/PRE&gt;</description>
      <pubDate>Thu, 03 Aug 2017 17:04:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385398#M277141</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2017-08-03T17:04:46Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385413#M277142</link>
      <description>&lt;P&gt;So it looks like you want to use your macro variables to calculate the name to use for the column?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;*Reporting month;
%let rep_mth=01Jan2017;

*Set to allow max required months remaining in account lifetimes; 
%let max_months=300; 

data tall ;
  set have ;
  month = intck('month',"&amp;amp;rep_mth."d,MonthYYYYMM_date)+1;
run;

proc transpose data=tall prefix=balmthend_ out=want (drop=_name_);
  where 1 &amp;lt;= month &amp;lt;= &amp;amp;max_months;
  by accountnumber;
  id month;
  var balmthend;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 03 Aug 2017 17:42:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385413#M277142</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2017-08-03T17:42:28Z</dc:date>
    </item>
    <item>
      <title>Re: Do loop macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385607#M277143</link>
      <description>&lt;P&gt;Brilliant, thank you!&lt;/P&gt;</description>
      <pubDate>Fri, 04 Aug 2017 08:58:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-loop-macro/m-p/385607#M277143</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-08-04T08:58:16Z</dc:date>
    </item>
  </channel>
</rss>

