What is the difference between censoring and truncation? In the book Statistical Models and Methods for Lifetime Data , it is written :

Censoring: When an observation is incomplete due to some random cause.
Truncation: When the incomplete nature of the observation is due to a systematic selection process inherent to the study design.

What is meant by "systematic selection process inherent to the study design" in the definition of truncation?
What is the difference between censoring and truncation?
 A: Definitions vary, and the two terms are sometimes used interchangeably. I'll try to explain the most common uses using the following data set:
$$ 1\qquad 1.25\qquad 2\qquad 4 \qquad 5$$
Censoring: some observations will be censored, meaning that we only know that they are below (or above) some bound. This can for instance occur if we measure the concentration of a chemical in a water sample. If the concentration is too low, the laboratory equipment cannot detect the presence of the chemical. It may still be present though, so we only know that the concentration is below the laboratory's detection limit.
If the detection limit is 1.5, so that observations that fall below this limit is censored, our example data set would become:
$$ <1.5\qquad <1.5\qquad 2\qquad 4 \qquad 5,$$
that is, we don't know the actual values of the first two observations, but only that they are smaller than 1.5.
Truncation: the process generating the data is such that it only is possible to observe outcomes above (or below) the truncation limit. This can for instance occur if measurements are taken using a detector which only is activated if the signals it detects are above a certain limit. There may be lots of weak incoming signals, but we can never tell using this detector.
If the truncation limit is 1.5, our example data set would become
$$2\qquad 4 \qquad 5$$
and we would not know that there in fact were two signals which were not recorded.
A: Just as a perspective from another field (programming), censoring and truncating are two distinct operations.
When working with a sensitive dataset, for example social security numbers and telephone numbers, I might censor it or have it censored prior to access being granted:
123-12-1234 => 999-99-9999
567-56-5678 => 999-99-9999
(906) 123-4567 => (000) 000-0000

This allows the rest of the application to operate as it normally would, with similar data structures, but with no real informational content or dissemination of private information.
Truncation, by contrast, is typically just cutting off remaining values after a certain point. To work on an application, I don't need hundreds of thousands of records, perhaps I only need ~50 of each which makes the data access much faster and the data sets smaller.
A similar variant of truncation is when inserting a value into a column or datatype of limited length or precision:
abcdefghijklmnopqrstuv => abcdef
10.23412421345 => 10.23
10.92455311 => 10

