<?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 %UNTIL loop execution help in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337040#M76479</link>
    <description>&lt;P&gt;Sorry, I can't even look at that code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I would do is start again. &amp;nbsp;Look at the process logically, You need to read a file, then group that out to multiple output files (I wont ask why). &amp;nbsp;So step 1 load your text file:&lt;/P&gt;
&lt;PRE&gt;data one;
  infile "&amp;lt;pathtofile&amp;gt;\&amp;lt;file&amp;gt;.txt" lrecl=135;
  input @1 provno $7.
        @8 lname $12. 
        @20 fname $7.
        @27 minit $1.
        @28 acctno $20.
        ...;
run;&lt;/PRE&gt;
&lt;P&gt;Step 2, assign a variable in that data to indicate which file the data element should go out to:&lt;/P&gt;
&lt;PRE&gt;data one;
  set one;
  output_file=cats("file",put(floor(_n_/100)+1,z8.));
run;&lt;/PRE&gt;
&lt;P&gt;I have just assigned each 100 rows to a new filename. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step 3, finally we use a distinct dataset to loop and generate the code export the data:&lt;/P&gt;
&lt;PRE&gt;proc sort data=one out=loop nodupkey;
  by output_file;
run;

data _null_;
  set loop;
  call execute(cats('proc export data=one (where=(output_file="',output_name,'")) 
                     outfile="&amp;lt;path&amp;gt;\',output_name,'.xlsx"; run;'));
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note, minor update to use cats() function rather than || and strip.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 01 Mar 2017 16:08:29 GMT</pubDate>
    <dc:creator>RW9</dc:creator>
    <dc:date>2017-03-01T16:08:29Z</dc:date>
    <item>
      <title>%DO %UNTIL loop execution help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337034#M76475</link>
      <description>&lt;P&gt;I have extensive experiance with VBA so I know that this can be done but I do not know the proper syntax for it as I have limited experiance with SAS coding. I have code that extracts data from pre set text files and aranges them into 74 Excel files. Currently the code is run one at a time, changing the x value at each iteration. I would like the code to run as a DO UNTIL loop. Any idea how to do this? Here is the code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt; %MACRO TEST;
%global inputfilename outputfilename x j;
%put &amp;amp;x;
%put &amp;amp;inputfilename;
%put &amp;amp;outputfilename;
%let x = 1;
%If &amp;amp;x = 1 %then %do;
%let inputfilename = C:\readtest4\P3674100.txt;
%let outputfilename = C:\Temp4\001 [NAME REDACTED] 4.xlsx;
%end;
%If &amp;amp;x = 2 %then %do;
%let inputfilename = C:\readtest4\P4135008.txt;
%let outputfilename = C:\Temp4\002 [NAME REDACTED] 4.xlsx;
%end;
*(CODE CONTUNUES IN LIKE MANNER)*
%If &amp;amp;x = 73 %then %do;
%let inputfilename = C:\readtest4\P4138601.txt;
%let outputfilename = C:\Temp4\050 [NAME REDACTED] 4.xlsx;
%end;
%If &amp;amp;x = 74 %then %do;
%let inputfilename = C:\readtest4\P4135300.txt;
%let outputfilename = C:\Temp4\006 [NAME REDACTED] 4.xlsx;
%end;

%MEND;
DATA ONE;
%TEST
INFILE "&amp;amp;inputfilename" LRECL=135;
INPUT @1 PROVNO $7.
@8 LNAME $12. 
@20 FNAME $7.
@27 MINIT $1.
@28 ACCTNO $20.
@48 ICN $11.
@59 J3DATE $6.
@65 CLCHARGE 10.2
@75 DOCCHARGE 10.2
@85 TPLPAID 10.2
@95 TPLDOC 10.2
@105 IDNO $1.
@106 CTYPE $2.
@108 SERDAT $6.
@108 SYR 2.
@110 SYMON 2.
@112 SYDAY 2.
@114 TRANSTYPE $1. 
@115 PAYAMT 10.2 
@125 BirDate $8.
@125 DoBYR 4.
@129 DoBMO 2.
@131 DoBDA 2.
@133 PATAGE 3. ;
YEARCUTOFF = 1904;
RUN;
DATA TWO;
SET ONE;
IF PATAGE &amp;gt; 109 THEN DO; 
AgeDays = Serdat - BirDate;
PatAge = Int(AgeDays/365.25);
END;
DROP SYr SyMon SyDay DObYR DoBMo DoBDa AGEDAYS YEARCUTOFF;
RUN;
DATA EDIT; /** THIS DATA SET IS ONLY FOR REVIEW PURPOSES- RECORDS ARE NOT ELIMINATED ***/
SET ONE;
IF SYR GT '16';
RUN;
PROC PRINT;
SUM CLCHARGE DOCCHARGE PAYAMT;
TITLE 'EDIT REPORT -- SERVICE DATE YEAR GREATER THAN AUDIT YEAR'; 
RUN;
PROC EXPORT 
%TEST
DATA=WORK.TWO
OUTFILE="&amp;amp;outputfilename"
DBMS=XLSX REPLACE;
RUN;

&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 15:47:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337034#M76475</guid>
      <dc:creator>drcline87</dc:creator>
      <dc:date>2017-03-01T15:47:50Z</dc:date>
    </item>
    <item>
      <title>Re: %DO %UNTIL loop execution help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337040#M76479</link>
      <description>&lt;P&gt;Sorry, I can't even look at that code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I would do is start again. &amp;nbsp;Look at the process logically, You need to read a file, then group that out to multiple output files (I wont ask why). &amp;nbsp;So step 1 load your text file:&lt;/P&gt;
&lt;PRE&gt;data one;
  infile "&amp;lt;pathtofile&amp;gt;\&amp;lt;file&amp;gt;.txt" lrecl=135;
  input @1 provno $7.
        @8 lname $12. 
        @20 fname $7.
        @27 minit $1.
        @28 acctno $20.
        ...;
run;&lt;/PRE&gt;
&lt;P&gt;Step 2, assign a variable in that data to indicate which file the data element should go out to:&lt;/P&gt;
&lt;PRE&gt;data one;
  set one;
  output_file=cats("file",put(floor(_n_/100)+1,z8.));
run;&lt;/PRE&gt;
&lt;P&gt;I have just assigned each 100 rows to a new filename. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Step 3, finally we use a distinct dataset to loop and generate the code export the data:&lt;/P&gt;
&lt;PRE&gt;proc sort data=one out=loop nodupkey;
  by output_file;
run;

data _null_;
  set loop;
  call execute(cats('proc export data=one (where=(output_file="',output_name,'")) 
                     outfile="&amp;lt;path&amp;gt;\',output_name,'.xlsx"; run;'));
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note, minor update to use cats() function rather than || and strip.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 16:08:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337040#M76479</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-03-01T16:08:29Z</dc:date>
    </item>
    <item>
      <title>Re: %DO %UNTIL loop execution help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337048#M76482</link>
      <description>&lt;P&gt;Oh where to begin. Your code has some issues that indicate a misunderstanding of some basic macro principles. To start, %TEST does not generate any SAS code so adding this to a datastep does exactly nothing. I suggest you read ujp on macro's first.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Luckiliy you may not need them at this point. If you look at the filevar option to the INFILE and FILE statements you may be able to use this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA ONE;
   INFILE CARDS;
   LENGTH FILENAME $40;
   INPUT FILENAME $;
   INFILE "&amp;amp;inputfilename" filevar=filename LRECL=135 END=DONE;
   DO WHILE (NOT ONE);
      INPUT @1 PROVNO $7.
      @8 LNAME $12. 
      ... etc ...
      @133 PATAGE 3. ;
      YEARCUTOFF = 1904;
      OUTPUT;
   END;
CARDS;
c:\readtest4\P4135601.txt
c:\readtest4\P4135300.txt
... etc ...
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This makes your input files datadriven. Nice and tight code. No macro's.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also consider eliminating datasets TWO and EDIT by moving that code in a single datastep.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hope this helps,&lt;/P&gt;
&lt;P&gt;- Jan.&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 16:10:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337048#M76482</guid>
      <dc:creator>jklaverstijn</dc:creator>
      <dc:date>2017-03-01T16:10:37Z</dc:date>
    </item>
    <item>
      <title>Re: %DO %UNTIL loop execution help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337051#M76483</link>
      <description>&lt;P&gt;Perhaps something like this?&amp;nbsp; If you have blanks in inputfilename or outputfilename adjustment will be necessary.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/* assuming your inputfilename and outputfilnames do not contain blanks */&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="2"&gt;&lt;STRONG&gt;%MACRO&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; TEST(inputfilename, outputfilename);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;DATA ONE;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;INFILE &lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;"&amp;amp;inputfilename"&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; LRECL=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;135&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;INPUT @&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; PROVNO &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$7.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;8&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; LNAME &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$12.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;20&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; FNAME &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$7.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;27&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; MINIT &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$1.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;28&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; ACCTNO &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$20.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;48&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; ICN &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$11.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;59&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; J3DATE &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$6.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;65&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; CLCHARGE &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;10.2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;75&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; DOCCHARGE &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;10.2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;85&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; TPLPAID &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;10.2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;95&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; TPLDOC &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;10.2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;105&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; IDNO &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$1.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;106&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; CTYPE &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$2.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;108&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; SERDAT &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$6.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;108&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; SYR &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;110&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; SYMON &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;112&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; SYDAY &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;114&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; TRANSTYPE &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$1.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;115&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; PAYAMT &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;10.2&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;125&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; BirDate &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$8.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;125&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; DoBYR &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;4.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;129&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; DoBMO &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;131&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; DoBDA &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;2.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;133&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; PATAGE &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;3.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;YEARCUTOFF = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;1904&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;DATA TWO;&lt;/P&gt;
&lt;P&gt;SET ONE;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;IF PATAGE &amp;gt; &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;109&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; THEN DO; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;AgeDays = Serdat - BirDate;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;PatAge = Int(AgeDays/&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;365.25&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;END;&lt;/P&gt;
&lt;P&gt;DROP SYr SyMon SyDay DObYR DoBMo DoBDa AGEDAYS YEARCUTOFF;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;DATA EDIT; &lt;/FONT&gt;&lt;FONT color="#008000" face="Courier New" size="2"&gt;/** THIS DATA SET IS ONLY FOR REVIEW PURPOSES- RECORDS ARE NOT ELIMINATED ***/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;SET ONE;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;IF SYR GT &lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;'16'&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;PROC PRINT;&lt;/P&gt;
&lt;P&gt;SUM CLCHARGE DOCCHARGE PAYAMT;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;TITLE &lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;'EDIT REPORT -- SERVICE DATE YEAR GREATER THAN AUDIT YEAR'&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;PROC EXPORT&lt;/P&gt;
&lt;P&gt;DATA=WORK.TWO&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;OUTFILE=&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;"&amp;amp;outputfilename"&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;DBMS=XLSX REPLACE;&lt;/P&gt;
&lt;P&gt;RUN;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="2"&gt;&lt;STRONG&gt;%MEND&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; TEST;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;　&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="2"&gt;&lt;STRONG&gt;Data&lt;/STRONG&gt;&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="2"&gt;_null_&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;length&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; inputfilename outputfilename $&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;128&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; ; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;infile&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; datalines &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;truncover&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="2"&gt;pad&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;input&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; @&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;01&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; inputfilename :&lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$128.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;@&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;27&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="2"&gt; outputfilename &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="2"&gt;$128.&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; ;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;call&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt; execute(&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;'%TEST('&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;||inputfilename||&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;','&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;||outputfilename||&lt;/FONT&gt;&lt;FONT color="#800080" face="Courier New" size="2"&gt;');'&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="2"&gt;datalines&lt;/FONT&gt;&lt;FONT face="Courier New" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;C:\readtest4\P3674100.txt C:\Temp4\001 [NAME REDACTED] 4.xlsx&lt;/P&gt;
&lt;P&gt;C:\readtest4\P4135008.txt C:\Temp4\002 [NAME REDACTED] 4.xlsx&lt;/P&gt;
&lt;P&gt;... ...&lt;/P&gt;
&lt;P&gt;C:\readtest4\P4138601.txt C:\Temp4\050 [NAME REDACTED] 4.xlsx&lt;/P&gt;
&lt;P&gt;C:\readtest4\P4135300.txt C:\Temp4\006 [NAME REDACTED] 4.xlsx&lt;/P&gt;
&lt;P&gt;;;;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 16:15:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337051#M76483</guid>
      <dc:creator>JerryV</dc:creator>
      <dc:date>2017-03-01T16:15:59Z</dc:date>
    </item>
    <item>
      <title>Re: %DO %UNTIL loop execution help</title>
      <link>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337081#M76495</link>
      <description>&lt;P&gt;Ouch, that's a tedious program. Refactoring is a good idea. If I understand correctly, you're importing X amount of files, processing them identically (?) and then exporting to Excel.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Are all the text files and Excel files the same? If so, read all the text files at once and process at once. How do you know which Excel files goes with which number? Is there a rule and most importantly, does it even matter &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;2.&amp;nbsp;The PROC EXPORT appears correct. Using CALL EXECUTE to export the data is better.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For Step 1, see this post:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-do-I-write-a-macro-to-import-multiple-text-files-that-have/ta-p/223627" target="_blank"&gt;https://communities.sas.com/t5/SAS-Communities-Library/How-do-I-write-a-macro-to-import-multiple-text-files-that-have/ta-p/223627&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For Step 2, see Call Execute documentation or another users post. You can use your dataset from above to drive it and create the names required dynamically.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 17:26:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/DO-UNTIL-loop-execution-help/m-p/337081#M76495</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-03-01T17:26:48Z</dc:date>
    </item>
  </channel>
</rss>

