1. Home
2. PERCENT procedure

# PERCENT procedure

Expresses the body of a table as percentages of one of its margins (R.W. Payne).

### Options

`CLASSIFICATION` = factors Factors classifying the margin over which the percentages are to be calculated; if this is not set, the percentages are over the final margin (grand mean or grand total etc.) Method to use to calculate the margin if not already present (`totals`, `means`, `minima`, `maxima`, `variances`, `medians`); default `tota` Whether to put 100% values into the margin instead of the original values (`no`, `yes`); default `no`

### Parameters

`OLDTABLE` = tables Tables containing the original values Tables to store the percentage values; if any of these is unset, the new values replace those in the original table

### Description

`PERCENT` allows you to express the body of a table as percentages of the values in one of its margins. The table is specified using the `OLDTABLE` parameter. A table to store the new values can be specified using the `NEWTABLE` parameter, otherwise these replace the values of the original table. The margin is indicated by listing the factors that define it using the `CLASSIFICATION` option; the default is the final margin (the grand total, or grand mean etc). If the original table has no margins, option `METHOD` defines how these are to be calculated; the default is to form margins of totals. The values originally in the margin will be left unchanged. If you would prefer these to be replaced by values of 100%, you should set option `HUNDRED=yes`.

Options: `CLASSIFICATION`, `METHOD`, `HUNDRED`.

Parameters: `OLDTABLE`, `NEWTABLE`.

### Method

If the `OLDTABLE` has no margins and contains no missing values, these are formed by the `MARGIN` directive. Alternatively, if there are missing values, margins other than variances can be formed using `TABULATE`. `CALCULATE` is then used to put the required margin into a table classified just by the factors that define the margin. The original table is divided by the marginal table and multiplied by 100 to give the required percentages. If option `HUNDRED=no`, the same operations are done on a dummy table that originally contains random numbers; for this table, values of 100 should occur only in the margin. Thus by using a logical test in which the values of the dummy table are compared with 100, the marginal values of the original table can be put back into the margin of the final table. The random numbers are generated using a specially written procedure `URANDOM` in case the Genstat random number generator is already in use in the program that called `PERCENT`.

Directives: `COMBINE`, `TABLE`, `TABULATE`, `MARGIN`.

Procedures: `MTABULATE`, `SVSTRATIFIED`, `SVTABULATE`, `TABMODE`, `TABSORT`, `T%CONTROL`.

Commands for: Calculations and manipulation.

### Example

```CAPTION  'PERCENT example',\
'Data from the Guide to Genstat, Part 1, Section 4.11.1.';
STYLE=meta,plain\
VARIATE  [NVALUES=15] Quantity,Charge
FACTOR   [NVALUES=15; LABELS=!T(A,B)] Type
&        [LABELS=!T(London,Manchester,Birmingham,Bristol)] Town
READ     [PRINT=errors] Town,Quantity,Type; FREPRESENTATION=labels
London 10 A  Manchester   5 B  Birmingham  10 B     Bristol 25 A
Manchester 10 *  Birmingham 100 B      London 200 B  Manchester 25 A
Bristol 50 A  Birmingham  25 A     Bristol  25 B      London 25 A
London 50 B  Manchester  25 B      London  50 A  :
&        Charge
10 20 15 15 * 60 80 30 25 15 25 15 40 * * :
CAPTION 'Form tables Totdisp and Payment, as in Section 4.11.1 of the Manual.'
TABULATE [PRINT=totals; CLASSIFICATION=Town,Type] Quantity; TOTALS=Totdisp
&        [CLASSIFICATION=Town] Charge; TOTALS=Payment
PERCENT  Payment; NEWTABLE=%payment
CAPTION  !T('The amount to be paid on behalf of each each town is expressed',\
'as a percentage of the total of all the payments.')
PRINT    %payment; FIELDWIDTH=8; DECIMALS=2; MNAME=total
PERCENT  [CLASSIFICATION=Town; HUNDRED=yes] Totdisp; NEWTABLE=%disp
CAPTION  !T('The numbers dispatched to each town are expressed',\
'as percentages of the total to that town; the',\
'Town margin contains values of 100%.')
PRINT    %disp; FIELDWIDTH=12; DECIMALS=2; MNAME=total
```
Updated on June 19, 2019