<?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: Macro Mess with beginning and ending multiple macros in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428455#M68516</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If people aren't going to spend a lot of time reading your macro generated code then you can cause a lot of issues with&lt;/P&gt;
&lt;P&gt;statements usages like&lt;/P&gt;
&lt;PRE&gt;call symputx('A', PUT(intnx('YEAR',%SYSFUNC(today()),-6), date9.)); * 6 years ago;&lt;/PRE&gt;
&lt;P&gt;and&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;if open_date lt "&amp;amp;A"d then newdate = substr("&amp;amp;A",6,4)-1;&lt;/PRE&gt;
&lt;P&gt;just create the numeric values and use the proper functions for dealing with dates such as&lt;/P&gt;
&lt;P&gt;&amp;nbsp; (%sysfunc is &lt;STRONG&gt;not needed&lt;/STRONG&gt; as you are doing this in a data step, calling a data step function TODAY())&lt;/P&gt;
&lt;PRE&gt;call symputx('A', intnx('YEAR',today(),-6); * 6 years ago;

if open_date lt &amp;amp;A then newdate = year(&amp;amp;a)-1;

if  &amp;amp;A le open_date le &amp;amp;B then newdate = year(&amp;amp;A);&lt;/PRE&gt;
&lt;P&gt;assuming all of your A, B, C etc variables are made as in the example for A. Though I suspect that the way you create and use the A through H variables you could likely get by with a single if/then and appropriate use of the year function on open_date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will say that calling a variable "newdate" when the content is a year has the potential for some confusion.&lt;/P&gt;</description>
    <pubDate>Wed, 17 Jan 2018 16:13:24 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2018-01-17T16:13:24Z</dc:date>
    <item>
      <title>Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428144#M68502</link>
      <description>&lt;P&gt;I am having a problem setting up the beginning and ending of a couple of macros I am trying to run in a SAS job.&amp;nbsp; I am using enterprise guide 7.15 and SAS version 9.x&amp;nbsp; I have&amp;nbsp; tried moving the history mend statement to the beginning of the program after the data null step and calling this macro&lt;/P&gt;
&lt;P&gt;%macro history( );&amp;nbsp; within the cleanup macro, but that did not work either. Any help would be appreciated.&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jan 2018 19:49:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428144#M68502</guid>
      <dc:creator>pangea17</dc:creator>
      <dc:date>2018-01-16T19:49:08Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428146#M68503</link>
      <description>&lt;P&gt;Please post code into a code box opened with either the {I} or running man forum icons.&lt;/P&gt;
&lt;P&gt;Microsoft Word documents are known to have issues with such things as macro viruses and many folks on this forum either won't open such or cannot due to organizational policy or nanny-ware.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Word has been known to "fix" code by changing programming quotes, the straight up and down types, to "smart quotes", the "prettier" curly versions, which yields code that will not run. Also other formatting changes may be made that insert invisible characters also resulting in code that will not run.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jan 2018 20:01:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428146#M68503</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2018-01-16T20:01:32Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428169#M68504</link>
      <description>&lt;P&gt;Being one of those who won't open a Word document, I can only guess at the problem.&amp;nbsp; Here's what I would change.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Define each macro separately from every other macro.&amp;nbsp; There is hardly ever a reason that a macro should be defined within another macro.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can still call one macro from another.&amp;nbsp; For example, the command %A can appear within the definition of %B.&amp;nbsp; But the statement %macro A should almost never appear within the definition of %B.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That may not fix all the problems, but it will clarify the structure of the macros, and what is supposed to happen at what point.&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jan 2018 21:11:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428169#M68504</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-01-16T21:11:32Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428237#M68512</link>
      <description>&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;libname&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; mccoy &lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'\\lassasc01\temp\collection\'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%LET&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; Z = '01jan1900'd;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; history (d1, d2, d3, d4, d5);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data _null_;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'A'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 6 years ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'B'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;5&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 5 years ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'C'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 4 years ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'D'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;3&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 3 years ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'E'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 2 years ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'F'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* 1 year ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'G'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* jan current year ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'H'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* dec current year ago;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'CBEG'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&amp;amp;d1,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'b'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;*last mo beginning date;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'CEND'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&amp;amp;d2,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;*last mo ending date;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'PBEG'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&amp;amp;d3,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'b'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;*2 mos ago beginning date;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'PEND'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&amp;amp;d4,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;*2 mos ago ending date;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'Q'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'b'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;),&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;11&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;)); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;* Dec prior year;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'J'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;85&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;　&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;%macro&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; cleanup(bodate, eodate, wstart, wend, istart, iend, s);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data _null_;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;call symputx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'M'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, PUT(intnx(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'MONTH'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;%SYSFUNC&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;(today()),&amp;amp;s,&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'e'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;), &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;date9.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;create table was as&lt;/P&gt;
&lt;P&gt;select&lt;/P&gt;
&lt;P&gt;a.cardid, a.creditaccountid, a.opendate,&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; datepart(a.opendate) as odate format = &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;mmddyy10.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;, a.activeaccountindicator, &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;a.endingreceivable as er_was, a.dimproductid, c.offer,&lt;/P&gt;
&lt;P&gt;a.dimexternalstatusid as es_was, a.dimbucketid as b_was, b.originalcreditline,&lt;/P&gt;
&lt;P&gt;d.score as cbscore, d.creditbureauscorerange, e.score as bhscore,&lt;/P&gt;
&lt;P&gt;e.behaviorscorerange&lt;/P&gt;
&lt;P&gt;from&lt;/P&gt;
&lt;P&gt;newdw.factfinancialcyclev2 a, newdw.dimproduct b, newdw.dimproductoffered c,&lt;/P&gt;
&lt;P&gt;newdw.dimscore d, newdw.dimscore e&lt;/P&gt;
&lt;P&gt;where&lt;/P&gt;
&lt;P&gt;(a.reportingdate ge &amp;amp;wstart and a.reportingdate le &amp;amp;wend)&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; and a.activeaccountindicator = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and a.opendate ge &amp;amp;bodate&lt;/P&gt;
&lt;P&gt;and a.opendate le &amp;amp;eodate&lt;/P&gt;
&lt;P&gt;and a.dimproductid = b.dimproductid&lt;/P&gt;
&lt;P&gt;and a.dimproductofferedid = c.dimproductofferedid&lt;/P&gt;
&lt;P&gt;and a.dimcreditbureauscoreid = d.dimscoreid&lt;/P&gt;
&lt;P&gt;and a.dimbehaviorscoreid = e.dimscoreid&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; and a.dimexternalstatusid in (&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;3&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;5&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;10&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;); &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;*C, F and Blank external status codes;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Quit;&lt;/P&gt;
&lt;P&gt;proc sort data = was; by creditaccountid; run;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;create table is as&lt;/P&gt;
&lt;P&gt;select&lt;/P&gt;
&lt;P&gt;a.cardid, a.creditaccountid, a.chargeoffindicator,&lt;/P&gt;
&lt;P&gt;a.endingreceivable as er_is, a.dimexternalstatusid as es_is,&lt;/P&gt;
&lt;P&gt;a.dimbucketid as b_is&lt;/P&gt;
&lt;P&gt;from&lt;/P&gt;
&lt;P&gt;newdw.factfinancialcyclev2 a&lt;/P&gt;
&lt;P&gt;where&lt;/P&gt;
&lt;P&gt;(a.reportingdate ge &amp;amp;Istart and a.reportingdate le &amp;amp;Iend)&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;and a.activeaccountIndicator =&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;QUIT;&lt;/P&gt;
&lt;P&gt;data is;&lt;/P&gt;
&lt;P&gt;set is;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;if chargeoffindicator = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then b_is = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;210&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data = is; by creditaccountid; run;&lt;/P&gt;
&lt;P&gt;data was_isa was_isb;&lt;/P&gt;
&lt;P&gt;merge was (in = a) is (in = b);&lt;/P&gt;
&lt;P&gt;by creditaccountid;&lt;/P&gt;
&lt;P&gt;if a and b then output was_isa;&lt;/P&gt;
&lt;P&gt;if a and not b then output was_isb;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;data was_is;&lt;/P&gt;
&lt;P&gt;set was_isa was_isb;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; format open_date &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;mmddyy10.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if es_was in (&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;7&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;8&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;) or es_is in (&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;7&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;8&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;) then delete; &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="3"&gt;/*lost and stolen*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if b_is = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then delete;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;open_date = datepart(opendate);&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date lt &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;A"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;A"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;)-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;A"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;B"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;A"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;B"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;C"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;B"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;C"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;D"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;C"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;D"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;E"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;D"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;E"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;F"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;E"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;F"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;G"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;F"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; if open_date ge &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;G"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; and open_date le &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;H"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt; then newdate = substr(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"&amp;amp;G"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;6&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;4&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;proc sort data = was_is; by newdate b_was b_is; run;&lt;/P&gt;
&lt;P&gt;proc means n median sum noprint data = was_is;&lt;/P&gt;
&lt;P&gt;var b_was B_is;&lt;/P&gt;
&lt;P&gt;by newdate b_was b_is;&lt;/P&gt;
&lt;P&gt;output out = was_is_result&lt;/P&gt;
&lt;P&gt;n(b_was) = Accounts&lt;/P&gt;
&lt;P&gt;sum(er_was) = Bal_Was&lt;/P&gt;
&lt;P&gt;sum(er_is) = Bal_Is&lt;/P&gt;
&lt;P&gt;median(cbscore) = CBureau&lt;/P&gt;
&lt;P&gt;median(bhscore) = BH_Score;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;data was_is_result2 (drop=_type_ _freq_);&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;format Ctype &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;$7.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; monthdate &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;mmyyd7.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;set was_is_result ;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;Ctype = &lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;'Vintage'&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;Monthdate = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;M"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; label Accounts=&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"Accounts"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; label cbureau =&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"CBureau"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt; label BH_Score =&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="3"&gt;"BH_Score"&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;create table vintrb AS&lt;/P&gt;
&lt;P&gt;Select monthdate, newdate, b_was, sum(accounts) as taccounts&lt;/P&gt;
&lt;P&gt;from was_is_result2&lt;/P&gt;
&lt;P&gt;group by monthdate, newdate, b_was;&lt;/P&gt;
&lt;P&gt;QUIT;&lt;/P&gt;
&lt;P&gt;proc sql;&lt;/P&gt;
&lt;P&gt;create table vintday AS&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;select &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;a.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;*, b.taccounts&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;from work.was_is_result2 a left join work.vintrb b&lt;/P&gt;
&lt;P&gt;ON a.b_was = b.b_was&lt;/P&gt;
&lt;P&gt;AND a.monthdate=b.monthdate&lt;/P&gt;
&lt;P&gt;AND a.newdate=b.newdate;&lt;/P&gt;
&lt;P&gt;QUIT;&lt;/P&gt;
&lt;P&gt;data newvint;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;format rollrate &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;percent8.2&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;set vintday;&lt;/P&gt;
&lt;P&gt;rollrate = (accounts/taccounts);&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;data VintExport;&lt;/P&gt;
&lt;P&gt;retain b_was b_is accounts rollrate bal_was bal_is CBureau bh_score monthdate ctype newdate;&lt;/P&gt;
&lt;P&gt;set newvint;&lt;/P&gt;
&lt;P&gt;keep b_was b_is accounts rollrate bal_was bal_is CBureau bh_score monthdate ctype newdate;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;proc sort data= VintExport; by monthdate newdate b_was b_is; RUN;&lt;/P&gt;
&lt;P&gt;/*data mccoy.vintage;&lt;/P&gt;
&lt;P&gt;set VintExport;&lt;/P&gt;
&lt;P&gt;RUN;*/&lt;/P&gt;
&lt;P&gt;proc append base=mccoy.Vintage data=VintExport;&lt;/P&gt;
&lt;P&gt;　&lt;/P&gt;
&lt;P&gt;　&lt;/P&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;%mend&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; cleanup;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;%&lt;STRONG&gt;&lt;I&gt;cleanup&lt;/I&gt;&lt;/STRONG&gt; (&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;Z"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;Q"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;PBEG"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;PEND"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;CBEG"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;"&amp;amp;CEND"d&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;, &amp;amp;d5);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;%MEND&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;%&lt;STRONG&gt;&lt;I&gt;history&lt;/I&gt;&lt;/STRONG&gt; (-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;,-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So it's not able to recognize &amp;amp;d5 in clean up macro as the -1 in the %history macro.&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jan 2018 01:20:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428237#M68512</guid>
      <dc:creator>pangea17</dc:creator>
      <dc:date>2018-01-17T01:20:58Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428239#M68513</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That's a lot of code, and I didn't read through it.&amp;nbsp; What is the problem you are seeing?&amp;nbsp; It sounds like you&amp;nbsp;believe&amp;nbsp;it's a problem with passing parameters between the macros?&amp;nbsp; Here is a simplified shell of your code, it works:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro history (d1, d2, d3, d4, d5);
  %put Inside History ;
  %put _local_ ;

  %macro cleanup(bodate, eodate, wstart, wend, istart, iend, s);
    %put Inside Cleanup ;
    %put _local_ ;
  %mend cleanup;

  %cleanup (0, 0, 0, 0, 0, 0, &amp;amp;d5)

%MEND; 

%history (1, 1, 1, 1, 5)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;It returns:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;41   %history (1, 1, 1, 1, 5)
Inside History
HISTORY D1 1
HISTORY D2 1
HISTORY D3 1
HISTORY D4 1
HISTORY D5 5
Inside Cleanup
CLEANUP BODATE 0
CLEANUP EODATE 0
CLEANUP IEND 0
CLEANUP ISTART 0
CLEANUP S 5
CLEANUP WEND 0
CLEANUP WSTART 0
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As Astounding wrote, it's a bad idea to have nested macro definitions.&amp;nbsp; You can call a macro from another macro without nesting the definitions themselves.&amp;nbsp; So the below will give the same results, and is easier to manage:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro history (d1, d2, d3, d4, d5);
  %put Inside History ;
  %put _local_ ;

  %cleanup (0, 0, 0, 0, 0, 0, &amp;amp;d5)
%mend history ;
 
%macro cleanup(bodate, eodate, wstart, wend, istart, iend, s);
  %put Inside Cleanup ;
  %put _local_ ;
%mend cleanup;

%history (1, 1, 1, 1, 5)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jan 2018 01:55:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428239#M68513</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2018-01-17T01:55:42Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428248#M68514</link>
      <description>&lt;P&gt;The error message at the bottom of your WORD file is talking about number of macro parameters.&lt;/P&gt;
&lt;PRE&gt;ERROR: More positional parameters found than defined.&lt;/PRE&gt;
&lt;P&gt;Looking at your %MACRO statements it looks like all of your macro parameters are defined to support being called by position and your calls appear to have the right number of commas.&amp;nbsp;&amp;nbsp;Perhaps there are syntax errors in your macro definitions so that they&amp;nbsp; are not getting defined and you end up calling some older version of the macro with different parameters?&amp;nbsp; Perhaps your macro variables used in the macro calls have commas in them?&amp;nbsp; Or perhaps some other statement is generating that error message?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Don't nest macro definitions. It will just confuse you.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro cleanup...;.....%mend cleanup;
%macro history...; ...%cleanup..... %mend history;
%history(....)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Don't use %sysfunc() to call functions when you are running a data step!!&amp;nbsp; Just call the function directly!&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
  call symputx('A', PUT(intnx('YEAR',today(),-6), date9.));    * 6 years ago;
  call symputx('B', PUT(intnx('YEAR',today(),-5), date9.));    * 5 years ago;
  call symputx('C', PUT(intnx('YEAR',today(),-4), date9.));    * 4 years ago;
  call symputx('D', PUT(intnx('YEAR',today(),-3), date9.));    * 3 years ago;
  call symputx('E', PUT(intnx('YEAR',today(),-2), date9.));    * 2 years ago;
  call symputx('F', PUT(intnx('YEAR',today(),-1), date9.));    * 1 year ago;
  call symputx('G', PUT(intnx('YEAR',today(),0), date9.));     * jan current year ago;
  call symputx('H', PUT(intnx('YEAR',today(),0,'e'), date9.)); * dec current year ago;
  call symputx('CBEG', PUT(intnx('MONTH',today(),&amp;amp;d1,'b'), date9.)); *last mo beginning date;
  call symputx('CEND', PUT(intnx('MONTH',today(),&amp;amp;d2,'e'), date9.)); *last mo ending date;
  call symputx('PBEG', PUT(intnx('MONTH',today(),&amp;amp;d3,'b'), date9.)); *2 mos ago beginning date;
  call symputx('PEND', PUT(intnx('MONTH',today(),&amp;amp;d4,'e'), date9.)); *2 mos ago ending date;
  call symputx('Q', PUT(intnx('MONTH',intnx('YEAR',today(),-1,'b'),11,'e'), date9.));  * Dec prior year;
  call symputx('J', PUT(intnx('MONTH',today(),-85,'e'), date9.));
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Where do you define the value for macro variable Z that you use in the call to the CLEANUP macro?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%cleanup ("&amp;amp;Z"d, "&amp;amp;Q"d, "&amp;amp;PBEG"d, "&amp;amp;PEND"d, "&amp;amp;CBEG"d, "&amp;amp;CEND"d, &amp;amp;d5);&lt;/CODE&gt;&lt;/PRE&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;</description>
      <pubDate>Wed, 17 Jan 2018 04:09:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428248#M68514</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-01-17T04:09:32Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Mess with beginning and ending multiple macros</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428455#M68516</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If people aren't going to spend a lot of time reading your macro generated code then you can cause a lot of issues with&lt;/P&gt;
&lt;P&gt;statements usages like&lt;/P&gt;
&lt;PRE&gt;call symputx('A', PUT(intnx('YEAR',%SYSFUNC(today()),-6), date9.)); * 6 years ago;&lt;/PRE&gt;
&lt;P&gt;and&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;if open_date lt "&amp;amp;A"d then newdate = substr("&amp;amp;A",6,4)-1;&lt;/PRE&gt;
&lt;P&gt;just create the numeric values and use the proper functions for dealing with dates such as&lt;/P&gt;
&lt;P&gt;&amp;nbsp; (%sysfunc is &lt;STRONG&gt;not needed&lt;/STRONG&gt; as you are doing this in a data step, calling a data step function TODAY())&lt;/P&gt;
&lt;PRE&gt;call symputx('A', intnx('YEAR',today(),-6); * 6 years ago;

if open_date lt &amp;amp;A then newdate = year(&amp;amp;a)-1;

if  &amp;amp;A le open_date le &amp;amp;B then newdate = year(&amp;amp;A);&lt;/PRE&gt;
&lt;P&gt;assuming all of your A, B, C etc variables are made as in the example for A. Though I suspect that the way you create and use the A through H variables you could likely get by with a single if/then and appropriate use of the year function on open_date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I will say that calling a variable "newdate" when the content is a year has the potential for some confusion.&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jan 2018 16:13:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Macro-Mess-with-beginning-and-ending-multiple-macros/m-p/428455#M68516</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2018-01-17T16:13:24Z</dc:date>
    </item>
  </channel>
</rss>

