https://en.wikipedia.org/wiki/Hermite_normal_form
SAS
HERMITE Function
The HERMITE function uses elementary row operations to compute the Hermite normal form of a matrix. For square matrices this normal form is upper triangular and idempotent.
If the argument is square and nonsingular, the result is the identity matrix. In general the result satisfies the following four conditions (Graybill, 1969):
- It is upper triangular.
- It has only values of 0 and 1 on the diagonal.
- If a row has a 0 on the diagonal, then every element in that row is 0.
- If a row has a 1 on the diagonal, then every off-diagonal element is 0 in the column in which the 1 appears.
The following statements compute an example from Graybill (1969):
a = {3 6 9, 1 2 5, 2 4 10}; h = hermite(a); print h;
http://support.sas.com/documentation/cdl/en/imlug/65547/HTML/default/viewer.htm#imlug_langref_sect260.htm
If the argument is a square matrix, then the Hermite normal form can be transformed into the row-echelon form by rearranging rows in which all values are 0.
The trace of the Hermite matirx is the rank.