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.

 

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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