These are version 8.1, v8.3, and v8.5 new features in 2009+.

8.5 Features

New ”~SET LANGUAGE=()” command replaces ”>LANGUAGE” and has new defaults (3/10):

Mentor now has a ”~SET LANGUAGE=()” to replace the >LANGUAGE command with the following new features:

1) Whatever you set is applied to any questionnaire specs you have unless

overridden in the questionnaire header, so if you say “speaking=en”

in the ~SET LANGUAGE=” command it will show up as the speaking= value

in the questionnaire’s .qsp file.

2) “CHECK_FOR_MISSING_LANGUAGES” is the default.  If you want to allow

for text lines with no language specified in a multi-language

questionnaire, say “DEFAULT_LANGUAGE=**”.

If you put the ”~SET LANGUAGE=(speaking=en)” command in your $CFMC/control/mentinit file for example, it will be applied to all questionnaires and all Mentor table scripts by default (English tables and reports will be produced). You can still use the ”>LANGUAGE” command but it is overridden by ‘~SET LANGUAGE=’ parameters and its use is being decremented in future versions.

New EDIT= option marks unused rows when doing statistics testing

The new EDOT option ‘SHOW_UNTESTED_STATS_AS_QUESTION_MARK’ causes all untested columns to be labeled with a significance test column label of (?), The default would be the minus form of this option, which is the current behavior where only marks columns tested.

8.3 Features

New ”~FREQ” option ”~SET -MAKE_BLANK_CAT_IN_FREQ” suppresses “blank” category in variable created

This option lets you make a variable using ~FREQ for tables such that it doesn’t include a category for blanks. In this way you can run tables that are based on “any response”. Note: This is now the default in the SCAN utility.

New ”~FREAK” related option ‘~SET FREAK_IGNORE_BLANKS’ allows frequency counts based on ‘any response’

If you say ”~SET FREAK_IGNORE_BLANKS” it will cause the ~FREAK output table to exclude any blanks. This also causes the percentages to be based on the total number of values instead of the number or cases read. Note: This is now the default in the SCAN utility.

Example table with feature not specified:


TABLE (T001) (items1:[1.4$])

items1     -COUNT-        -% OF TOTAL-   CUM. %


1           20.0           20.0     (blank)

1234           1           20.0           40.0

5678           1           20.0           60.0

ABCD           1           20.0           80.0

EFGH           1           20.0          100.0

—      5        100.0


Same table with ‘~SET FREAK_IGNORE_BLANKS’ specified:



TABLE (T001) (items1:[1.4$])

items1     -COUNT-        -% OF TOTAL-   CUM. %


1234           1           25.0           25.0

5678           1           25.0           50.0

ABCD           1           25.0           75.0

EFGH           1           25.0          100.0

—      4        100.0


Note the number of cells and total drops to 4, only four categories print, and the cumulative percents etc. represent 4 categories.

“Mode” feature records ‘most often reported’ response to numeric fields or stub rows

The “mode” is now available on a table. You can get it one of two ways:

1) Using $[mode] [numeric variable] on a table

This works just like the “median” command, but it returns the value most often found

in the variable. You can specify more “buckets” to save responses in using $[mode(500)]

for instance for 500 buckets.

2) Using the “PRINT_ROW=mode” stub command to print the stub item most often used





[PRINT_ROW=mode] Row most often chosen }

You can now control the maximum length exported for SPSS variable labels (question titles) and value labels (response text)

You can now use ”~SPECC_RULES SPSS_VARIABLE_LABEL_LENGTH=#” or “SPSS_VALUE_LABEL_LENGTH=#” to control the maximum text for a variable (question title) value (response code). The defaults have been increased to the current SPSS maximum of 255 for each. Previously the default and maximum was 60 for the SPSS_VALUE_LABEL_LENGTH.

Previously, you could only say whether to truncate the variable_label from 255 to 60 and the default response text was 60. Now you have total control of the length and can use whatever length you want.

New ”~FREAK” related option unlimited variable lengths allowed

Previously you could only have a total of 50 or so characters represented in a ~FREAK table (the sum of all variable lengths). Now you can have as many as the widest variable possible (5000 columns). Here is example output for a 100 column wide variable:



TABLE (T003) ([1.100$])


-COUNT-        -% OF TOTAL-   CUM. %

1          100.0          100.0

1          100.0


There is a new EXTRACT_STRING() function

The function can be used to extract a portion of a FLD variable.

EX: PRINT “q1 fourth response: \s” EXTRACT_STRING([q1$],7,2)


q1  = a FLD variable with a width of 10 and 2 character response codes

7,2 = location of the fourth response (start in position 7 for a width of 2)

This function can also be used for a VAR question.

Example for printing a phone number:

PRINT “q3: \s-\s-\s” EXTRACT_STRING(q3,1,3) EXTRACT_STRING(q3,4,3) EXTRACT_STRING(q3,7,4)

But this new syntax resembles the old syntax:

PRINT “q3: \s-\s-\s” [(q3) 1.3$] [(q3) 4.3$] [(q3) 7.4$]

Enhanced ~SPEC_RULES STRIP_HTML functionality

The ~SPEC_RULES option STRIP_HTML now translates some basic HTML entities to the characters that they represent. For example, the html entity ” ” is now converted to one space.

These restricted characters in html (& < > ” ‘) are also translated and middot is being replaced by a period.

Note that named, decimal, and hex entities are supported. Decimal entities are created as ampersand_hashmark_decimal-character-value and the hex version is ampersand_hashmark_x_hex-character-value.

New behavior for >DEFINE

When a duplicate >DEFINE is found, the program now checks the new define string against the old and if they match a warning is issued. An error is still issued if the define strings don’t match.


>DEFINE @test 1

>DEFINE @test 1

(WARN #4747) re-DEFINE of @test duplicates old value “1”


>DEFINE @test 1

>DEFINE @test 2

(ERROR #4003) Attemped re-DEFINE of @test ignored. Use >-DEFINE first.

New number of row limit and new ~SET MAX_TABLE_ROWS option

The new default number of “detail” rows in a single table is now 1,000,000. The summary rows and PRINT_ROW= rows do not count as part of the maximum number of rows. In order to run a table this size you should expect to increase the core and the maxvsize.

There is a new ~SET option called MAX_TABLE_ROWS=. If you are constructing a table with more than a million rows, use this option to increase the number of allowable rows.

Enhanced functionality of ampersands and @define in Repeats

You can now @define a word that begins with an ampersand and then use it as a way to actually ampersand in a file in a >REPEAT block.

Example of existing syntax:

” defb is a file that contains 1,2,3,4,5. The defined word does not

” include the ampersand.

>DEFINE @defb defb

>REPEAT $a=&


test$a: $a


Example of new syntax:

” defc also is a file that contains 1,2,3,4,5. The defined word

” includes the ampersand.

>DEFINE @defc &defc

>REPEAT $a=&


test$a: $a


New warning when reading non-printing characters

When any characters are found in an ASCII input file that are in the range of decimal 0-31, a single warning is generated indicating this. The data is not changed.

Post processing a print file is one circumstance where having some of these low end ASCII characters in your input is fine. Other times the special characters are completely unexpected and don’t manifest themselves in an obvious way. The tab character in particular is problematic. The one time warning is intended to help in the unexpected situations without annoying the people who know what they are doing.

New >-ALLOWINDENT warnings

Using >-ALLOWINDENT now gives this warning:

(WARN #9803) Running in >-allowindent mode is not recommended

A warning is issued for any bad indented command starting with >WHILE in >-ALLOWINDENT mode.

For example:


would get this warning:

(WARN #9802) Indented Meta/System command? Allowindent is not on, treated as text

Longer >DEFINE names

All >DEFINE names can now be 30 characters long.

Example: >DEFINE @thiscanbeareallyreallylongname yes

Increased number of >REPEAT iterations

The maximum number of >REPEAT iterations has been increased to 10,000.


>REPEAT  $a=1,…,10000



Increased number of variables in a >REPEAT

The maximum number of variables in a repeat was increased from 100 to 1000.


The webSurvent style programming requires extensive use of display questions. These display questions hold text that otherwise would have been written as question text. The result is that this text is missing from the def file.

There is a new ~SPEC_RULES keyword of DISPLAYS_TO_LINES. This option makes it so that the text from !DISPLAY questions are written in a lines= format to the def and ban files. The lines= elements retain their appropriate CFM##### names and their appropriate suffix of _z for the def file and _y for the ban file.

Note: This is a solution that only benefits Mentor users. It does not solve the issue of missing text from files created by ~REFORMAT like SPSS files. The only known fix for these files is to copy text from the display questions to regular questions using the \- text \* style of writing.

8.1 Features

260 columns of statistics available

Not sure when this became available, but: Up to 260 columns may be tested, A-Z for the first 26, A1-Z1 for the second up to A9-Z9 for the last 26.

New >LOCALDB command

There is a new >LOCALDB command to control the features of the local dbfile. This is an easier than using the alternative >DBSIZES command.

For example, to make the local dbfile allow duplicate entries with a warning, the >DBSIZES syntax was:

>DBSIZES=0 0, 0 0, 0 0, 0 0 w, 0 0

The >LOCALDB syntax is now:

>LOCALDB duplicate=warn

These four >CREATEDB options also work with >LOCALDB:

>LOCALDB duplicate=warn


>LOCALDB entries=999999

>LOCALDB sizes=L


New !DUD! category spec

There is a new !DUD! category spec. Using this allows the user to specify an empty place holder category within a normal row or column spec without needing to break it up with “with DUD with”.

EX: test1: [5#1/2/!DUD!/4/5]


There is a new ~SPEC_RULES option called TABSET_ON_OFF_COMMENT that will add the following comment strings around each tabset in the .def and .ban files:

‘start q#

‘end q#

Def file example:

‘start q1_z

TABSET= { q1_z:


Simple cat question with numeric response codes.

Legal answers are 1 or 2.}






ROW=: [5.1^1/2]


‘end q1_z


In the case of questions that do not have a label, the cfm will be used (i.e., ‘start cfm00001_z and ‘end cfm00001_z).

The default is -TABSET_ON_OFF_COMMENT.


There is a new ~REFORMAT keyword called ZERO_FILL_NUMERIC_VALUES. With this option, all numeric values will be zero-filled (even though they were not collected that way) when output using ~REFORMAT. This applies to ”!NUMERIC” and ”!EXPRESSION” variables. The value is zero-filled to the length of the question.


The ~INPUT option DELIMIT_NAMES_FIRST now supplies a field_# name when the name provided is not a legal CfMC variable name. Names with a space in them, whether quoted or not, are not legal CfMC variable names.

When a bad name is detected and replaced with field_#, a warning is issued indicating the bad name has been replaced.


(WARN #3834) Name from delimit file ‘three-x’ is not a usable name. Assigning default name.

New define called @CFMC_VERSION keyword

There is a new @CFMC_VERSION defined variable that will return the software version (e.g. 7.7, 8.1, 8.3, etc.).

Example of usage:

>IF @cfmc_version > 7.7

SAY “Good, the define is TRUE.”


SAY “BAD, the define is FALSE”