BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Statistics91
Calcite | Level 5

Hi all,

I currently have this program which is supposed to simulate a gambling strategy (educational purposes; this is not a winning strategy by any means).  My program is not quite working because when the 2nd iteration of k begins, the InHand variable continues to accumulate from the final value of when k = 1.  Essentially, I need the InHand to go back to starting at 0 when a new iteration of k begins.  Basically, I just want to repeat everything in the 'i' loop 10,000 times

Does anyone have an idea of a modification I can make to fix this?

data gamble;

do k = 1 to 10000;

do i = 1 to 100000 until (Strategy = "STOP");

Win = RAND('BINOMIAL',0.476,1);

if Win = 1 then Payoff = 5;

else if Win = 0 then Payoff = -5;

InHand + Payoff;

if InHand >= 45 then Strategy = "STOP";

else if InHand <= -50 then Strategy = "STOP";

else Strategy = "CONTINUE";

if InHand = 45 then Result = "WIN ";

else Result = "LOSS";

end;

output;

output;

end;

run;

Thank you in advance!

1 ACCEPTED SOLUTION

Accepted Solutions
slchen
Lapis Lazuli | Level 10

This is what you need?

data gamble;

do k = 1 to 10000;

do i = 1 to 100000 until (Strategy = "STOP");

Win = RAND('BINOMIAL',0.476,1);

if Win = 1 then Payoff = 5;

else if Win = 0 then Payoff = -5;

InHand + Payoff;

if InHand >=45 or inHand<=-50 then Strategy = "STOP";

else Strategy = "CONTINUE";

if InHand = 45 then Result = "WIN ";

else Result = "LOSS";

end;

output;

call missing(Inhand);

end;

run;

View solution in original post

3 REPLIES 3
slchen
Lapis Lazuli | Level 10

This is what you need?

data gamble;

do k = 1 to 10000;

do i = 1 to 100000 until (Strategy = "STOP");

Win = RAND('BINOMIAL',0.476,1);

if Win = 1 then Payoff = 5;

else if Win = 0 then Payoff = -5;

InHand + Payoff;

if InHand >=45 or inHand<=-50 then Strategy = "STOP";

else Strategy = "CONTINUE";

if InHand = 45 then Result = "WIN ";

else Result = "LOSS";

end;

output;

call missing(Inhand);

end;

run;

Statistics91
Calcite | Level 5

Thanks a lot to both of you for your help.  Both solutions worked perfectly.

PGStats
Opal | Level 21

All you need is the statement InHand = 0; after do k = 1 to 10000;

I also suggest calling STREAMINIT as the first statement of the datastep to get reproducible results. 

Why two output statements?

You may also consider replacing the BINOMIAL distribution with the BERNOULLI.

PG

PG

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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
  • 801 views
  • 6 likes
  • 3 in conversation