• v7.15.0 Stable

    gitea-actions released this 2026-09-23 23:08:24 +00:00 | 92 commits to main since this release

    Data Controller for SAS - v7.15.0

    Released 23 September 2026.

    This release makes Data Controller handle SAS special missing values properly in its data quality rules. Special missings are the 27 values .A to .Z and ._ - real numeric values that record why something is missing - and Data Controller has carried them since v4. What it did not do until now was behave sensibly when one of them met a validation rule.

    There is no security content in this release, and nothing that forces an upgrade. You only need it if you want the special missing support described below. If special missings do not appear in the tables you edit, your experience is unchanged and you can upgrade whenever it suits you.

    For installation / upgrade instructions, visit https://docs.datacontroller.io/


    Highlights

    Special missing values and the data quality rules

    Special missings have always been editable, reviewable and approvable in Data Controller. The gaps were in the rules: some of them could not accept a value the column actually held, and two of them disagreed with each other.

    • NOT NULL now rejects a special missing. A special missing is NULL as far as a SAS NOT NULL (or primary key) constraint is concerned: an insert carrying one is refused by the database with an integrity constraint error (_NM0001_ / _PK0001_). The frontend rule was passing it, so the editor accepted a value the target table would refuse. The rule now fails it, so the problem surfaces as you edit rather than when the data loads. A single letter is still perfectly valid in a character column, where there is no special missing concept.

    • A primary key column is NOT NULL whether or not you configured a rule for it. A key identifies the row, so a blank or a special missing in it was never going to identify anything - but nothing enforced that unless the target table carried a physical constraint or MPE_VALIDATIONS had a NOTNULL rule on the column. Data Controller now applies NOT NULL to every primary key column of its own accord, so the grid, the edit-record modal and Excel upload validation all reject a blank and a special missing in the key.

    • MINVAL and MAXVAL compare in the order SAS uses. A range rule converted both the cell value and its own value to a number, so a special missing on either side became NaN. Two oddities followed: MINVAL rejected a blank and a special missing while MAXVAL accepted both, and a range written in special missings - MINVAL .A with MAXVAL .C - accepted everything and rejected nothing. Both sides are now placed in SAS's own order: every missing below every non-missing value, and the missing values ordered ._, then the regular missing, then .A through .Z. So MINVAL .A with MAXVAL .C accepts .B and rejects .D, a missing fails a numeric floor and passes a numeric ceiling, and a number sits above every missing. A range rule with a numeric value behaves exactly as it did before.

    • A strict dropdown can now match a special missing. The dropdown list for a numeric column was built by converting each entry to a number, which turned the bare letter a special missing arrives as into NaN - so a strict (HARDSELECT) rule could never accept a value the column actually held, even one that appeared in its own list. The letter is now kept, along with the regular missing, so the list shows A, _ and . alongside the ordinary values.

    • Nothing to configure. Special missings are available by default on numeric columns, and you can type them with or without the period - .a and a are the same missing. A column formatted as a date, datetime or time is the one exception, because those edit through a date picker that takes only a date.

    Where to read more

    The validation rules documentation now has a section on what each rule does with a special missing, including the ordering above.

    There is also a short recording on the blog, showing the whole cycle on one table - entering special missings, the rules that reject them, submitting, approving, and the DIFF:

    https://datacontroller.io/sas-special-missings/

    If you are upgrading

    Two of the changes are stricter than before, and both are deliberate:

    • a special missing is now rejected by NOT NULL, where the editor previously accepted it
    • a blank or a special missing is now rejected in a primary key column, even where no NOTNULL rule is configured

    Neither can break a load that was working: a special missing in a NOT NULL column was refused by the database anyway, and a key holding a blank or a special missing cannot identify the row it is meant to match. If a column does need to accept a special missing, give it a MAXVAL, a regex rule, a dropdown or ROUND rather than a numeric MINVAL.

    Downloads