There is the question of what happens below the lowest left-hand end.
If I go
egen cmpg = cut(mpg), at(15(5)45)
values below 15 are also mapped to missing. The attitude is
tough: "You didn't say what you wanted doing with values
below 15, so I don't know what to do with them.". This could be
regarded as fit punishment, or a suitable reply, that is,
the user got what was asked for, no more, no less.
Also note the closely related function recode() -- which although it will
not take a numlist, labels values with the RIGHT hand endpoint of an
interval (except for the top-coded values):