DATA Step, Macro, Functions and more

Do loop until end?

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 13
Accepted Solution

Do loop until end?

I am new to sas. I am trying to run following code. It runs for ever. What am I doing wrong? I am tryting to see how many years it takes to payback loan.

 

 

 

data loan;
	initial_payment=1000;
	loan=30000-initial_payment;
	payment=500;
	years=0;

	do until (loan_end=0);
		years+1;
		loan_end=loan-payment;
	end;
run;

Thanks in advance.

 

 

 

 

 

run;

 


Accepted Solutions
Solution
‎05-03-2018 05:34 AM
Super User
Super User
Posts: 9,386

Re: Do loop until end?

Posted in reply to Myurathan

In @Shmuel's example the value of loan_end is always loan-payment, 28500, hence it never lowers down to 0 or less.  Update this to :

data loan;
   initial_payment=1000;
   loan=30000-initial_payment;
   payment=500;
   years=0;
   loan_end=loan;
   do until (loan_end le 0);
      years+1;
      loan_end=loan_end-payment;
   end;
run;

So we set loan_end to be loan, then take payment off loan_end each time, so loan_end goes down  We could alos write it as:

data loan;
   initial_payment=1000;
   loan=30000-initial_payment;
   payment=500;
   years=0;
   do until (loan le 0);
      years+1;
      loan=loan-payment;
   end;
run;

Basically you need to ensure the condition in the until is triggered, which as it was being created each round never happened.

View solution in original post


All Replies
Trusted Advisor
Posts: 1,831

Re: Do loop until end?

Posted in reply to Myurathan

Try:

data loan;
	initial_payment=1000;
	loan=30000-initial_payment;
	payment=500;
	years=0;

	do until (loan_end LE 0);
		years+1;
		loan_end=loan-payment;
	end;
run;
Occasional Contributor
Posts: 13

Re: Do loop until end?

Thanks @Shmuel. but it also runs forever. Smiley Sad
Super User
Super User
Posts: 9,386

Re: Do loop until end?

Posted in reply to Myurathan

Why do you need the loop, it is a simple calculation:

data loan;
   initial_payment=1000;
   loan=30000-initial_payment;
   payment=500;
   years=loan / payment;
run;

As for why it does not work, well, your condition loan_end le 0 must never be true.

Occasional Contributor
Posts: 13

Re: Do loop until end?

Thanks RW9. I am aware that it is a simple calulation. I am trying to learn looping. Can you please explain why loan_end le 0 never be true?. Thanks
Solution
‎05-03-2018 05:34 AM
Super User
Super User
Posts: 9,386

Re: Do loop until end?

Posted in reply to Myurathan

In @Shmuel's example the value of loan_end is always loan-payment, 28500, hence it never lowers down to 0 or less.  Update this to :

data loan;
   initial_payment=1000;
   loan=30000-initial_payment;
   payment=500;
   years=0;
   loan_end=loan;
   do until (loan_end le 0);
      years+1;
      loan_end=loan_end-payment;
   end;
run;

So we set loan_end to be loan, then take payment off loan_end each time, so loan_end goes down  We could alos write it as:

data loan;
   initial_payment=1000;
   loan=30000-initial_payment;
   payment=500;
   years=0;
   do until (loan le 0);
      years+1;
      loan=loan-payment;
   end;
run;

Basically you need to ensure the condition in the until is triggered, which as it was being created each round never happened.

Occasional Contributor
Posts: 13

Re: Do loop until end?

Thank you so much @RW9
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 6 replies
  • 110 views
  • 0 likes
  • 3 in conversation