BookmarkSubscribeRSS Feed
MrBruce
Calcite | Level 5

Hi, I have one question on infinite loop. There are two programs, which are shown below. 

 

Why does program A work fine but program B generates infinite loop? thanks. 

 

Program A:

filename qtr1 ('c:\sasuser\month1.dat''c:\sasuser\month2.dat'

'c:\sasuser\month3.dat');

data work.firstqtr;

infile qtr1;

input Flight $ Origin $ Dest $

Date : date9. RevCargo : comma15.;

run;

 

Program B:

 

data work.quarter;

do Month = 9, 10, 11;

nextfile="c:\sasuser\month"

!!compress(put(Month,2.)!!".dat",' ');

do until (lastobs);

infile temp filevar=nextfile end=lastobs;

input Flight $ Origin $ Dest $ Date : date9.

RevCargo : comma15.;

output;

end;

end;

run;

3 REPLIES 3
jefreytag
Fluorite | Level 6
!!compress(put(Month,2.)!!".dat",' '); 

Don't you mean

||put(Month,2.)||".dat";

You used exclamation marks. Why do you take the compress function?

Peter_C
Rhodochrosite | Level 12
More than one issue:
On windows I think filevar needs to provide a variable holding a single path (and a filename that could hold global chars*? ).
Is the default length of NEXTFILE wide enough to hold the required path\file name ?
I expect you need to reset the value of LASTOBS to zero as it will be retained.
Tom
Super User Tom
Super User

Is this a test?

 

SAS normally stops a data step when it reads past the end of the input data set or text file.

Run this little example to see what I mean.

 

data _null_;
   put 'BEFORE INPUT' _n_= ;
   input  ;
   put 'AFTER INPUT' _n_ = ;
cards;
1
2
3
;

 

In your second data step the conditions on your DO loops prevent it from reading past the end of the data. So on iteration 1 it does DO MONTH=9,10,11 and then on iteration 2 it does it again, ad infinitum.  Add a STOP statement before the RUN statement.

 

 

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 1572 views
  • 1 like
  • 4 in conversation