The ultimate goal is to create a report of the count of transactions by interval broken down by phase of a test (3 phases) and transaction. The report would look something like the following (I'm only showing 2 of 4 transactions with different intervals) IIntinSec CKOM P1 Cnt CKOM P1 1 % CKOM P2 Cnt CKOM P2 % CKOM P3 Cnt CKOM P3 % ECOM P1 Cnt ECOM P1 % ECOM P2 Cnt ECOM P2 % ECOM P3 Cnt ECOM P3 %
0.00 to 0.25 2,519 41% 5,669 57% 6,248 44% 48,216 81% 48,191 75% 37,104 72%
0.26 to 0.50 3,048 49% 2,879 29% 5,779 41% 7,829 13% 11,377 18% 7,081 14%
0.51 to 0.75 261 4% 341 3% 669 5% 881 1% 1,698 3% 1,963 4%
...
1.76 to 2.00 35 1% 163 2% 167 1% 96 0% 241 0% 373 1%
2.01 to 2.25 27 0% 154 2% 144 1% 107 0% 227 0% 287 1%
Total 6,164 100% 9,947 100% 14,052 100% 59,608 100% 64,633 100% 51,213 100% I was able to get what I want (minus the percentages by creating a number of variables and basically counting doing it once for the RUNINT variable and another for the LIFEINT variable. Below is the code for the RUNINT variable: PROC SORT DATA=TEMP1; BY SYSTEM RUNINT TRANNAME PHASE;
DATA RUNCNTS (KEEP = SYSTEM RUNINT EWEBP1R EWEBP2R EWEBP3R ECOMP1R
ECOMP2R ECOMP3R OMSEP1R OMSEP2R OMSEP3R CKOMP1R
CKOMP2R CKOMP3R);
SET TEMP1; BY SYSTEM RUNINT TRANNAME PHASE;
RETAIN CKOMP1R;
RETAIN CKOMP2R;
RETAIN CKOMP3R;
RETAIN ECOMP1R;
RETAIN ECOMP2R;
RETAIN ECOMP3R;
RETAIN EWEBP1R;
RETAIN EWEBP2R;
RETAIN EWEBP3R;
RETAIN OMSEP1R;
RETAIN OMSEP2R;
RETAIN OMSEP3R;
IF FIRST.RUNINT THEN DO;
CKOMP1R=0;
CKOMP2R=0;
CKOMP3R=0;
ECOMP1R=0;
ECOMP2R=0;
ECOMP3R=0;
EWEBP1R=0;
EWEBP2R=0;
EWEBP3R=0;
OMSEP1R=0;
OMSEP2R=0;
OMSEP3R=0;
END;
SELECT;
WHEN (TRANNAME='CKOM' AND PHASE = 'P1') CKOMP1R=CKOMP1R+1;
WHEN (TRANNAME='CKOM' AND PHASE = 'P2') CKOMP2R=CKOMP2R+1;
WHEN (TRANNAME='CKOM' AND PHASE = 'P3') CKOMP3R=CKOMP3R+1;
WHEN (TRANNAME='ECOM' AND PHASE = 'P1') ECOMP1R=ECOMP1R+1;
WHEN (TRANNAME='ECOM' AND PHASE = 'P2') ECOMP2R=ECOMP2R+1;
WHEN (TRANNAME='ECOM' AND PHASE = 'P3') ECOMP3R=ECOMP3R+1;
WHEN (TRANNAME='EWEB' AND PHASE = 'P1') EWEBP1R=EWEBP1R+1;
WHEN (TRANNAME='EWEB' AND PHASE = 'P2') EWEBP2R=EWEBP2R+1;
WHEN (TRANNAME='EWEB' AND PHASE = 'P3') EWEBP3R=EWEBP3R+1;
WHEN (TRANNAME='OMSE' AND PHASE = 'P1') OMSEP1R=OMSEP1R+1;
WHEN (TRANNAME='OMSE' AND PHASE = 'P2') OMSEP2R=OMSEP2R+1;
WHEN (TRANNAME='OMSE' AND PHASE = 'P3') OMSEP3R=OMSEP3R+1;
END;
IF LAST.RUNINT THEN OUTPUT; This resulted in the following: RUNINT CKOMP1R CKOMP2R CKOMP3R ECOMP1R ECOMP2R ECOMP3R EWEBP1R EWEBP2R EWEBP3R OMSEP1R OMSEP2R OMSEP3R
INT01 698 3137 8168 69084 55368 60915 110779 96143 83831 242 504 147
INT02 1514 5061 12693 18664 11366 17821 10114 4444 4196 145 187 37
INT03 447 600 1523 2582 1056 4333 2275 1070 1391 54 61 25
INT04 234 244 669 868 556 2524 1230 616 636 29 40 8
INT05 178 141 384 974 651 1091 902 480 476 74 703 274
INT06 148 145 263 440 264 550 757 362 355 34 102 28
INT07 225 153 377 690 214 475 1220 488 596 38 44 7
INT08 368 208 468 852 418 578 1752 909 773 70 39 3
INT09 576 236 320 1617 488 560 2847 920 662 114 44 2
INT10 960 144 87 1984 374 139 3352 752 309 175 26 0
INT11 589 0 0 937 215 0 1716 301 0 124 0 0
INT12 165 0 0 242 38 7 277 68 0 36 0 0
INT13 48 0 0 213 23 21 94 0 0 24 0 0
INT14 1 0 0 0 0 0 1 0 0 0 0 0 For now, I can put this in Excel and add the percentages but I'll continue playing with the code and will look at the PROC SQL or PROC FREQ to see if it helps streamline this. This code will be reused for future tests which occur a few times a year so having it create the complete report with as little manipulation as possible will help. Besides, playing with SAS code and learning new options is fun. 🙂2 For those interested, I'm attaching the latest version of the code and report.
... View more