The validator fix lands in dc/dc (PR #323), so the post describes the fixed
behaviour rather than the mismatch: a special missing fails NOTNULL, matching
a physical SAS NOT NULL / primary key constraint.
Also records what ROUND and SOFTSELECT/HARDSELECT do with one, and groups
MINVAL/MAXVAL/HARDFORMULA/SOFTFORMULA under 'not supported'.
Verified on a real SAS estate:
- a physical NOT NULL (or primary key) constraint rejects a special missing,
and getdata merges that constraint into a frontend NOTNULL rule - which
passes a special missing, so the editor is more lenient than the constraint
- a special missing as a MINVAL rule value fails every cell; as a MAXVAL rule
value it fails every real number
- a HARDFORMULA/SOFTFORMULA reading a special-missing cell returns #VALUE!
- PRX and the JS engine agree on the value; SAS pads the numeric-to-character
conversion, so an anchored pattern re-used in SAS needs strip()
- heading + intro now say these are Data Controller's MPE_VALIDATIONS rules,
applied in the browser
- new paragraph on options MISSING: a regular missing prints as . unless the
option changes it (eg to blank); special missings are never affected
- CASE split out of the rule list: it is a character rule, and a special
missing always reaches the browser as an uppercase letter
- HARDREGEX and SOFTREGEX separated (SOFTREGEX warns rather than blocks, and
is ignored when the column also has a HARDREGEX)
- LinkedIn copy kept in sync
Behaviour confirmed against the deployed services on a real Viya estate.
Cover art for "28 Ways to Be Missing in SAS": a pack of wolves on a snow plain
at dusk with one animal standing apart, carrying the post's opening line - a
numeric missing is not a lone wolf, there are 28 of them.
Source image was 4:3, so it is cropped to 1.91:1 (1200x627) to match the other
feed covers and double as the LinkedIn share card. The crop was chosen to keep
both the lone wolf on the left and the full pack on the right in frame, losing
only sky above the clouds and foreground snow.
Sets previewImg in the front matter; the template renders it, so it is not
embedded in the body as well. Verified through gatsby build - the image
pipeline emits 300/600/1200-wide variants.
Replaces the placeholder one-liner with the prompt actually intended for the
cover: the pack of wolves on a snow plain at dusk with one animal standing
apart, plus the negative constraints, the output spec (./cover.jpeg at
1200x627, previewImg in front matter) and a fallback single-subject variant.
Two deliberate choices are recorded so they are not lost on a regenerate:
- No text, letters or numbers anywhere in the image. The subject is letters
standing in for numbers, so a stray glyph undercuts the cover.
- No exact head count of 28. Generators cannot count, and a crowded pack reads
worse than a dozen clear animals; the number belongs in the headline.
Links to the full prompt and variants on paste.4gl.io.
The special missings material that was added to the v4.0 blog post belongs in
its own post: that article is a release announcement for v4.0, not a teaching
piece. This reverts the blog change and publishes the content under /feed/.
The new post covers what SAS special missings are, how the SASjs Adapter
carries them between the browser and SAS, and how Data Controller's validation
rules treat them - NOTNULL passes, MINVAL fails, MAXVAL passes, and the regex
rules apply as they would to any other value.
The LinkedIn version of the copy, and the image prompt for the cover, are
recorded in a comment at the foot of the file.