The problem with code like
if age = . or age gt 120 then age_group=.;
is that it doesn't handle other missing values such as .A or ._, so I greatly prefer
if missing(age) or age gt 120 then age_group=.;

I also object to the commonly-used
if . < age < 0 then ...
or the slightly more correct
if .z < age < 0 then ...
preferring the explicit
if not missing(age) and age < 0 then ...
which doesn't require arcane knowledge of the internal representation of missing values in SAS (including the ordering of special missing values).

In short, if you want to test for missingness, do not test for equality to . but instead test for missingness.