Online File

How to use this page


Rick Aster: Professional SAS Programming Shortcuts: Contents

Chapter 82
Program
Risk (stochastic simulation)


DATA WORK.RISK1 (KEEP=D_DICE A_DICE OUTCOME COMPRESS=NO);
   LENGTH D_DICE A_DICE 3 OUTCOME $ 2;
   RETAIN N 10000;
   DO D_DICE = 1 TO 2; * Number of defending dice;
   DO A_DICE = 1 TO 3; * Number of attacking dice;
      ARMIES = A_DICE MIN D_DICE; * Number of armies decided;
      DO I = 1 TO N;
         ROLL_D1 = CEIL(6*RANUNI(7)); * Defending dice roll;
         IF D_DICE >= 2 THEN ROLL_D2 = CEIL(6*RANUNI(7));
         ELSE ROLL_D2 = 0;
         DEFEND1 = LARGEST(1, OF ROLL_D1-ROLL_D2); *Defending dice, sorted;
         DEFEND2 = LARGEST(2, OF ROLL_D1-ROLL_D2);
         ROLL_A1 = CEIL(6*RANUNI(7));   * Attacking dice;
         IF A_DICE >= 2 THEN ROLL_A2 = CEIL(6*RANUNI(7));
         ELSE ROLL_A2 = 0;
         IF A_DICE >= 3 THEN ROLL_A3 = CEIL(6*RANUNI(7));
         ELSE ROLL_A3 = 0;
         ATTACK1 = LARGEST(1, OF ROLL_A1-ROLL_A3);
         ATTACK2 = LARGEST(2, OF ROLL_A1-ROLL_A3);
         * Count results;
         IF ARMIES = 1 THEN SELECT (ATTACK1 > DEFEND1);
            WHEN (1) OUTCOME = ' A';
            OTHERWISE OUTCOME = ' D';
            END;
         ELSE SELECT ((ATTACK1 > DEFEND1) + (ATTACK2 > DEFEND2));
            WHEN (2) OUTCOME = 'AA';
            WHEN (1) OUTCOME = 'AD';
            OTHERWISE OUTCOME = 'DD';
            END;
         OUTPUT;
         END;
      END;
      END;
   STOP;
RUN;

PROC TABULATE DATA=WORK.RISK1 FORMCHAR='            ';
   CLASS D_DICE A_DICE OUTCOME;
   TABLE D_DICE*A_DICE, OUTCOME*ROWPCTN*F=7.3
       / RTSPACE=15 BOX='A=Attacker D=Defender';
   KEYLABEL ROWPCTN=' ';
RUN;

 O /\

Global
Statements

RICK ASTER

SAS

BOOKS

Tech | Dictionary

Download | Rastinate

Rick Aster

Professional SAS Programming Shortcuts

Contents/Online Files

Corrections

Catalog Page