Form 1 processes through all records in the recordset performing the transform function only on those pairs of adjacent records where the match condition is met (indicating duplicate records) and passing through all other records directly to the output.
Example:
//a crosstab table of last names and the number of times they occur
MyRec := RECORD
Person.per_last_name;
INTEGER4 PersonCount := 1;
END;
LnameTable := TABLE(Person,MyRec); //create dataset to work with
SortedTable := SORT(LnameTable,per_las_name); //sort it first
MyRec Xform(MyRec L,MyRec R) := TRANSFORM
SELF.PersonCount := L.PersonCount + 1;
SELF := L; //keeping the L rec makes it KEEP(1),LEFT
// SELF := R; //keeping the R rec would make it KEEP(1),RIGHT
END;
XtabOut := ROLLUP(SortedTable,
LEFT.per_last_name=RIGHT.per_last_name,
Xform(LEFT,RIGHT));