Arte SheetsLearn. Try. Understand.

Statistical

Baseball OPS (On-Base Plus Slugging), OBP, SLG & Isolated Power (ISO)

Calculate Major League Baseball On-Base Percentage (H + BB + HBP) / (AB + BB + HBP + SF), Total Bases shortcut H + 2B + 2*3B + 3*HR, Slugging, OPS, and Isolated Power.

Combine reaching base and extra-base hitting

OBP uses hits, walks and hit-by-pitch in its numerator, and at-bats plus walks, hit-by-pitch and sacrifice flies in its denominator. SLG uses total bases divided by at-bats. OPS adds these two different rates; it is not itself a probability.

The total-bases shortcut H + 2B + 2×3B + 3×HR counts one base for every hit, then adds the extra bases for doubles, triples and home runs. ISO removes singles from the per-at-bat total. Use consistent counts from the same player and reporting period.

This example checks nonnegative integer counts, hits no greater than at-bats and extra-base hits no greater than total hits. It does not infer awards or current league averages from a fixed OPS threshold. With zero at-bats, AVG, SLG, OPS and ISO return N/A; OBP remains defined if its own denominator is positive.

Sabermetric Hitting StatFormula500 AB, 150 H, 35 2B, 5 3B, 30 HR, 75 BB, 5 HBP, 10 SF
Batting Average (AVG)B3 / B2.300 (0.300)
On-Base Percentage (OBP)(B3+B7+B8) / (B2+B7+B8+B9)230 / 590 = .390 (0.390)
Slugging Percentage (SLG)(B3 + B4 + 2*B5 + 3*B6) / B2285 / 500 = .570 (0.570)
On-Base Plus Slugging (OPS)OBP + SLG | ISO = SLG - AVGOPS = .960 | ISO = .270

Official On-Base Plus Slugging (OPS = OBP + SLG)

Add the unrounded component ratios, then round the final display to three decimals.

=IF(COUNT(B2:B9)<>8,"Invalid inputs",IF(OR(MIN(B2:B9)<0,B2<>INT(B2),B3<>INT(B3),B4<>INT(B4),B5<>INT(B5),B6<>INT(B6),B7<>INT(B7),B8<>INT(B8),B9<>INT(B9),B3>B2,SUM(B4:B6)>B3),"Invalid inputs",IF(B2=0,"N/A",ROUND(((B3 + B7 + B8) / (B2 + B7 + B8 + B9)) + ((B3 + B4 + 2 * B5 + 3 * B6) / B2), 3))))

Isolated Power (ISO = SLG - AVG)

Measures extra bases per at-bat purely from doubles, triples, and home runs.

=IF(COUNT(B2:B9)<>8,"Invalid inputs",IF(OR(MIN(B2:B9)<0,B2<>INT(B2),B3<>INT(B3),B4<>INT(B4),B5<>INT(B5),B6<>INT(B6),B7<>INT(B7),B8<>INT(B8),B9<>INT(B9),B3>B2,SUM(B4:B6)>B3),"Invalid inputs",IF(B2=0,"N/A",ROUND((B4 + 2 * B5 + 3 * B6) / B2, 3))))

On-base percentage (OBP)

The denominator is checked before division; display rounding does not change the input counts.

=IF(COUNT(B2:B9)<>8,"Invalid inputs",IF(OR(MIN(B2:B9)<0,B2<>INT(B2),B3<>INT(B3),B4<>INT(B4),B5<>INT(B5),B6<>INT(B6),B7<>INT(B7),B8<>INT(B8),B9<>INT(B9),B3>B2,SUM(B4:B6)>B3),"Invalid inputs",IF(SUM(B2,B7:B9)=0,"N/A",ROUND((B3 + B7 + B8) / (B2 + B7 + B8 + B9), 3))))

Slugging percentage (SLG)

The denominator is checked before division; display rounding does not change the input counts.

=IF(COUNT(B2:B9)<>8,"Invalid inputs",IF(OR(MIN(B2:B9)<0,B2<>INT(B2),B3<>INT(B3),B4<>INT(B4),B5<>INT(B5),B6<>INT(B6),B7<>INT(B7),B8<>INT(B8),B9<>INT(B9),B3>B2,SUM(B4:B6)>B3),"Invalid inputs",IF(B2=0,"N/A",ROUND((B3 + B4 + 2 * B5 + 3 * B6) / B2, 3))))

Batting average (AVG)

The denominator is checked before division; display rounding does not change the input counts.

=IF(COUNT(B2:B9)<>8,"Invalid inputs",IF(OR(MIN(B2:B9)<0,B2<>INT(B2),B3<>INT(B3),B4<>INT(B4),B5<>INT(B5),B6<>INT(B6),B7<>INT(B7),B8<>INT(B8),B9<>INT(B9),B3>B2,SUM(B4:B6)>B3),"Invalid inputs",IF(B2=0,"N/A",ROUND(B3/B2,3))))

Try the example

Use the original values or change them to test your understanding.

Further reading