Check if report layout is as per shell
Check if titles and footnotes are as per shell
Check if there are any spelling mistakes in explicitly given labels, titles and footnotes
Check for consistency between footnote references and footnotes
Check if captial N count is per the population and subgroup of interest
Check if percentages are calculated using appropriate denominator, particulary when different denominators are used for different sections of the report
Crosscheck with other outputs, when feasible
Crosscheck with listing references
Cross check for any line truncations
Confirm by visual inspection if treatment columns are orderered as per shell in the report
Crosscheck the number of decimals presented for statistical measures as per shell or a specified standard
There can be cases where a subject may receive a treatment other than the planned(randomized) treatment. For such subjects, planned arm and actual arm related variables will have different value.
For safety analysis like adverse events, lab, ecg, vitals we count the subjects based on their actual treatment. For other analysis planned on full analysis set or randomized analysis we count those subjects based on their planned treatment.
Layout:

To understand the study population we generally summarize the subjects' demographic and baseline characteristics by individual treatments and a total column. These characteristics variables can be of categorical or numeric type.
For categorical variables, we present the summary in the form of subject counts and percentages. The percentages can be calculated based on the number of subjects in each treatment group or based on the number of subjects with non-missing data for each categorical variable in that treatment group. Some examples of categorical variables include: Sex, Race, Ethnicity, Geographic region, Age groups etc.
For numeric variables, we present the summary in the form n, mean, standard deviation, median, quaritle 1, quartile 3, minimum and maximum values. Some examples of numeric variables include: AGE, Baseline height, Baseline weight, Baseline BMI etc.

Programming flow:

For categorical variables:
We get the counts of number of subjects in each level of the categorical variables using an appropriate procedure like proc freq or proc sql
As all levels of the categorical variable may not be present in all treatment groups, we create a dummy to present all levels, with 0 counts as needed.
We get the total number of subjects in each treatment group and use them to calculate percentages
We create numeric variables to sort the groups and levels within each variable as per the table presentation requirement and then transform the data as per shell requirement using procedures like proc transpose.

For numeric variables:
We get the required descriptive stats using a procedure like proc means or proc summary
Apply appropriate rounding and convert the results into character values and concatenate the statistics as needed.
We create numeric variables to sort the statistics as per shell requirement and then then transform the data as per shell requirement using procedures like proc transpose.

We then combine the datasets containing the categorical variable and numeric variables and generate the report using proc report using appropriate options.
We also create macro variables, either using proc sql or call symputx, for presenting the treatment totals in the column headers of the report.

Link to an example Demographics Table
Layout:
An adverse event can be classified based on multiple qualifiers like: Treatment-emergence, Causality (Relationship to treatment), Seriousness of the event, Resulting in Death, Action taken with study treatment because of the adverse event etc.

So, in an overview of adverse events table we provide a summary at each level of these qualifier variables and present the number of subjects, percentage of subjects and optionally the number of events.
Programming flow:
For this table we present all the rows displayed in shell even if there is no record in the input dataset which meets a specific row's filter condition.So, we create a dummy dataset containing all rows to be presented in the table.
We count the number of subjects (and number of events when needed) with at least one event meeting the row's filter condition separately and then combine into a single dataset.
We get the number of subjects in each treatment into a dataset and merge it with the adverse events counts dataset and calculate percentages
We create a numeric variable to sort the observations based on the table shell requirement.
We then restructure the dataset using proc transpose such that treatment groups appear as columns and then generate the report using proc report.
We also create macro variables, either using proc sql or call symputx, for presenting the treatment totals in the column headers of the report.

Link to an example "Overview of Adverse Events" Table