## Do loop until end?

Solved
Occasional Contributor
Posts: 13

# 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;``````

run;

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

## Re: Do loop until end?

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.

All Replies
Posts: 1,831

## Re: Do loop until end?

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.
Super User
Posts: 9,386

## Re: Do loop until end?

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
Posts: 9,386

## Re: Do loop until end?

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.