Most runners in a race finish with a number next to their name. Some finish with letters instead. Those letters are result codes, and anyone who loads racing results into a spreadsheet or a database meets them within the first hundred rows, usually as a type error in a column that was supposed to be numeric.
What follows is a reference for the horse racing result codes used in British, Irish and Hong Kong results, with a count of how often each one appears in our archive. The counts are a useful reminder of how much of a database is not a finishing position at all.
UK and Irish codes
A runner who did not complete the course gets a code in the place column. These are the ones we store, from the most to the least frequent:
| Code | Meaning | Times in the archive |
|---|---|---|
| PU | Pulled up: the jockey stopped riding before the finish | 78,682 |
| F | Fell | 18,364 |
| U | Unseated rider (often written UR elsewhere) | 12,205 |
| B | Brought down by another horse falling | 1,479 |
| RR | Refused to race at the start | 924 |
| DQ | Disqualified after the race | 786 |
| RO | Ran out, left the course | 587 |
| S | Slipped up | 533 |
| R | Refused at a fence or hurdle | 328 |
| C | Carried out by another runner | 85 |
Pulled up is far and away the biggest group, and it is almost entirely a jump racing story. Jockeys pull up 14.9% of runners over fences and 9.5% over hurdles. On the flat the figure is about 0.3%. Falls follow the same pattern: 4.3% of chase runners fall, against 1.9% over hurdles and 0.04% on the flat turf. These are shares of the 1.86 million runner records we hold for the UK and Ireland.
Hong Kong codes
Hong Kong publishes a slightly different set, and it adds withdrawals, which are common there. The ones we see most:
| Code | Meaning | Times |
|---|---|---|
| WV | Withdrawn on veterinary grounds | 3,976 |
| WV-A | Withdrawn on veterinary grounds after weighing out | 893 |
| PU | Pulled up | 233 |
| WX-A | Withdrawn by order of the stewards, after weighing out | 231 |
| UR | Unseated rider | 204 |
| WX | Withdrawn by order of the stewards | 203 |
| FE | Fell during the race | 104 |
| VOID | Race declared void | 62 |
| DNF | Did not finish | 59 |
| TNP | Took no part | 59 |
| DISQ | Disqualified | 44 |
| WR | Withdrawn by the starter | 32 |
| WXNR | Withdrawn, non-runner | 7 |
The Hong Kong list is led by veterinary withdrawals, not by horses that stopped during a race. That says a lot about how closely runners are checked before the off. Our Hong Kong veterinary records post goes into what the vet notes contain.
Dead heats
A dead heat means two or more runners could not be separated by the photo finish and share the position. In Hong Kong results the place is written with the number first and the letters after, so 4 DH means a dead heat for fourth. We hold 290 of those for fourth place and 224 for fifth, and the numbers keep going down to 12 DH. In UK results the dead heat appears in the margin column as dh, which is why a numeric parser trips on it as well.
Handling the codes in an analysis
Keep the code. It is tempting to turn every non-number into a missing value, but a horse that fell is not the same observation as a horse that was withdrawn. The first ran and the second did not, and a model of finishing behaviour should only see the first.
Work out which codes mean the horse actually ran. Everything in the UK table above except RR (refused to race) involves a runner who started. Withdrawals never started and normally belong outside any performance sample.
Treat disqualification separately. A disqualified horse completed the course, so its time and margin describe the race as it was run, even though the official result changed.
Split the column. We recommend storing the numeric position in one field and the code in another, which is how most analysts end up reshaping the raw data anyway.
One last point on the UK table. The code U is how we store an unseated rider, and you will often see it written UR. Check which spelling your own source uses before you merge two datasets, because a join on the raw string will quietly drop the rows that disagree.
The cleaning is the dull part, so do it once. Keep the code in one column and the number in another, and the rest of your pipeline stops caring how a horse failed to finish. The horse racing datasets keep the codes in the place field, the API returns the same values for the UK and Hong Kong, and margins, which have their own abbreviations, are covered in margins in racing data.

Comments are closed