Redefines a factor so that its levels and labels are unique (R.W. Payne).
||What must be the same for groups defined by the factor to be merged (
||Value to use to modify duplicate levels; default
||Whether to add the increment to the value or the absolute value of duplicated levels (
||Factors whose levels and labels are to be made unique|
||New factors with unique levels; if unset, the original
||Indicates whether the factor has changed|
FACUNIQUE allows you to correct mistakes in the definition of a factor that may have caused the same level number or the same label to occur more than once. Genstat does not fault duplicate levels or labels as there are some occasions when this may be deliberate. For example, you might want to use the same labelling for more than one line of a table, and might therefore have that label repeated in the factor classifying its rows.
The factors to correct are listed by the
OLDFACTOR parameter, and the
NEWFACTOR parameter can save the redefined factors. If no
NEWFACTOR is defined for one of the factors in the
OLDFACTOR list, the original factor itself is redefined. The
CHANGED parameter can save a scalar that set to one if changes were needed, or otherwise set to zero.
FACUNIQUE appends the characters
'_2' and so on to each duplicate label. The default for levels is that it adds a small increment to each zero or positive duplicate level, and subtracts that increment from each negative duplicate level. If you would prefer to add the increment to both positive and negative levels, 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 level.) The default increment is taken as the largest power of 10 that is small enough to modify each duplicate level while preserving their numerical order. So, for example, if you had levels 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 levels 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, the
INCREMENT option allows you to supply your own increment.
MERGESAME option allows you to merge some of the groups that are defined by the factor. If you set
MERGESAME=levels, any groups that have the same level will be merged (but any duplicate labels will still be made unique). If you set
MERGESAME=labels, any groups that have the same label will be merged (but any duplicate levels will still be made unique). Finally, if you set
MERGESAME=labels,levels, only groups that have the same level and label will be merged (but any remaining duplicate levels or labels will be made unique).
The unique levels and labels are obtained using procedure
Any restrictions are ignored.
CAPTION 'FACUNIQUE example'; STYLE=meta VARIATE [VALUES=-3,-2,-1,0,1,2,3,4,0,1,-1,5] levs TEXT [VALUES=Z,Y,X,A,B,C,D,E,A,B,XX,E] labs FACTOR [NVALUES=24; LEVELS=levs; LABELS=labs] f1 GENERATE f1 CAPTION 'Make levels and labels unique.' FACUNIQUE f1; NEWFACTOR=nf1 PRINT 3(f1,nf1); FREP=ordinals,levels,labels; FIELD=8; DECIMALS=1 CAPTION 'Merge labels and make levels unique.' FACUNIQUE [MERGESAME=labels] f1; NEWFACTOR=nf1 PRINT 3(f1,nf1); FREP=ordinals,levels,labels; FIELD=8; DECIMALS=1 CAPTION 'Merge levels and make labels unique.' FACUNIQUE [MERGESAME=levels] f1; NEWFACTOR=nf1 PRINT 3(f1,nf1); FREP=ordinals,levels,labels; FIELD=8; DECIMALS=1 CAPTION 'Merge when levels and labels same, otherwise make unique.' FACUNIQUE [MERGESAME=labels,levels] f1; NEWFACTOR=nf1 PRINT 3(f1,nf1); FREP=ordinals,levels,labels; FIELD=8; DECIMALS=1