Redefines a variate or text so that its values are unique (R.W. Payne).
||Increment to use to modify duplicated numbers; default
||Whether to add the increment to the value or the absolute value of duplicated numbers (
||Vectors whose values are to be made unique|
||New vectors with unique values; if unset, the values of the corresponding
||Indicates whether the values have changed|
FUNIQUEVALUES allows you to redefine a variate or a text so that its values become unique. The variates or texts are listed by the
OLDVECTOR parameter, and the
NEWVECTOR parameter can save new variates or texts with the redefined values. If no
NEWVECTOR is defined for one of the variates or texts in the
OLDVECTOR list, the new values are put into the original variate or text. The
CHANGED parameter can save a scalar that set to one if the values were changed; otherwise it is set to zero.
FUNIQUEVALUES appends the characters
_2' and so on to each duplicate value of a text. By default, with a variate,
FUNIQUEVALUES adds a small increment to each zero or positive duplicate value, and subtracts that increment from each negative duplicate value. If you would prefer to add the increment to both positive and negative values, you can set option
ADDTO=value. (This indicates that the increment is to be added to the value, rather than the absolute value of the duplicate number.) The default increment is taken as the largest power of 10 that is small enough to modify each duplicate value while preserving their numerical order. So, for example, if you had values 1, 2, 3, 2, 5 and 2, the increment would be 0.1; the second instance of 2 would become 2.1, and the third would become 2.2. As another example, if the values were 0.1, 0.2, 0.3, 0.2, 0,5 and 0.2, the increment would be 0.01; the second instance of 0.2 would then become 0.21, and the third would become 0.22. Alternatively, you can supply your own increment using the
Any restrictions are ignored.
Commands for: Calculations and manipulation.
CAPTION 'FACUNIQUEVALUES example'; STYLE=meta VARIATE [VALUES=2,5,2,3,6,8,5,9,5] v1 TEXT [VALUES=b,e,b,c,f,h,e,i,e] t1 CALCULATE v2 = v1 / 10 FUNIQUEVALUES v1,v2,t1; NEWVECTOR=nv1,nv2,nt1 PRINT v1,nv1,v2,nv2,t1,nt1; FIELD=6; DECIMALS=2 FUNIQUEVALUES [INCREMENT=1] v2; NEWVECTOR=nv2 PRINT v2,nv2; FIELD=6; DECIMALS=2