Online File

How to use this page


Rick Aster: Professional SAS Programming Shortcuts: Contents

Chapter 82
Program
Risk (exhaustive simulation)


DATA WORK.RISK2 (KEEP=D_DICE A_DICE OUTCOME COMPRESS=NO);
   LENGTH D_DICE A_DICE 3 OUTCOME $ 2;
   DO D_DICE = 1 TO 2; * Number of defending dice;
   DO A_DICE = 1 TO 3; * Number of attacking dice;
      RES_A = 0; RES_AA = 0; RES_DD = 0;
      ARMIES = A_DICE MIN D_DICE; * Number of armies decided;
      DO ROLL_D1 = 1 TO 6; * Defending dice roll;
      DO ROLL_D2 = (D_DICE = 2) TO 6*(D_DICE = 2); * 1-6 or 0-0;
         DEFEND1 = LARGEST(1, OF ROLL_D1-ROLL_D2); *Defending dice, sorted;
         DEFEND2 = LARGEST(2, OF ROLL_D1-ROLL_D2);
         DO ROLL_A1 = 1 TO 6; * Attacking dice;
         DO ROLL_A2 = (A_DICE >= 2) TO 6*(A_DICE >= 2);
         DO ROLL_A3 = (A_DICE >= 3) TO 6*(A_DICE >= 3);
            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;
         END;
         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