Skip to content

IOL vs EM_at or above CS.sas runs unmodified on Jenner#1

Open
jenner-analytics wants to merge 1 commit into
Yanan-Hu:mainfrom
jenner-analytics:jenner-check/initial-bundles
Open

IOL vs EM_at or above CS.sas runs unmodified on Jenner#1
jenner-analytics wants to merge 1 commit into
Yanan-Hu:mainfrom
jenner-analytics:jenner-check/initial-bundles

Conversation

@jenner-analytics

@jenner-analytics jenner-analytics commented Jul 17, 2026

Copy link
Copy Markdown

Jenneranalytics.com provides an API that runs SAS code, with support for more than 200 SAS procedures. You can also use it with AI assistants in a collaborative workspace. It's available for Mac on the Apple App Store, and by license for Windows and Linux.

We support the larger community by
(1) increasing access to SAS-compatible systems,
(2) by providing test coverage and a test coverage framework to public SAS repos in order to encourage the use of best practices in software engineering.

Your IOL vs EM_at or above CS.sas runs on Jenner unmodified — this PR adds a small compatibility bundle so you can see for yourself. It's the test we wrote for your project, shared in case it's useful, and was assembled with AI assistance as is most code in modern businesses today.

What stood out reading through the study code is the risk-level classifier — the ARRAY cond(*) over medic_cond1medic_cond29 with a DO loop calling find() on each ICD-10 prefix, splitting the direct obstetric codes (O10O16 for hypertensive disorders, O43O45 for haemorrhage) from the indirect chapter-level groups like F, I, and the endocrine E0E90 block. Collapsing free-text diagnosis codes into comp_ALL and the comorbidity flags that way is a clean, auditable route to the low-risk stratum, and it reads exactly the same on Jenner.

Because the analysis datasets live behind the matern libname, each bundle carries a small inline sample matching the columns the step reads, so the procedure logic — your PROC TRANSPOSE reshape, the comorbidity DATA step, the PROC FREQ odds ratios, PROC TABULATE, PROC MEANS, and the PROC GENMOD Poisson log-link risk-ratio model — runs end to end against data that never leaves your repo.

jenner-check/
├── t001_transpose_last_birth/    (PROC TRANSPOSE — last birth method to wide)
├── t002_comorbidity_classify/    (ARRAY + DO + find() ICD comorbidity flags)
├── t003_freq_oddsratio/          (PROC FREQ chisq + oddsratio, by parity)
├── t004_tabulate_descriptive/    (PROC TABULATE n + colpctn)
├── t005_means_summary/           (PROC MEANS age / BMI / gest weeks)
├── t006_genmod_poisson_rr/       (PROC GENMOD poisson log-link, repeated GEE)
├── run_jenner.sh                 (re-runs every bundle, checks the pinned result)
└── README.md

Each bundle folder holds the script.sas, a two-line autoexec.sas, the captured log and listing, and an expected.json of the fields to re-check. To try one against the hosted API, check out this branch and run from the repo root:

# Check out this PR (puts you on its branch); then run from the repo root:
gh pr checkout 1
curl -sS --data-binary @jenner-check/t002_comorbidity_classify/script.sas https://api.jenneranalytics.com/v1/quick

Running cd jenner-check && ./run_jenner.sh --all re-runs all six bundles and verifies the pinned fields in each expected.json. The API is free to try, no signup — full API reference: the docs.

On what leaves your machine: the runner uploads only the SAS source text of the script it runs, plus the two-line autoexec, to api.jenneranalytics.com, which runs it and returns the log and listing. It does not read or upload any data files, so anything sitting next to a script stays on your machine, and nothing is sent unless you run one of these commands yourself — the same as pasting a snippet into any hosted tool. Since a script's own source is what's transmitted, you can review it first if it embeds anything sensitive inline.

Merge it, close it, or ignore it — all fine, and no response is expected. We won't open further PRs in this repo; to opt out of any future ones for good, put no-more-prs in a comment or open an issue titled jenner-check: opt out.


Lawrence W. Sinclair
CEO / Jenner Analytics Ltd
linkedin.com/in/lwsinclair/

Adds a self-contained jenner-check/ directory with six compatibility
bundles derived from the study's own analysis code, plus a small bash
runner that re-submits each bundle to the hosted Jenner API and verifies
the pinned result fields:

  t001_transpose_last_birth  PROC TRANSPOSE (last birth method to wide)
  t002_comorbidity_classify  ARRAY + DO + find() ICD comorbidity flags
  t003_freq_oddsratio        PROC FREQ chisq + oddsratio, by parity
  t004_tabulate_descriptive  PROC TABULATE n + colpctn
  t005_means_summary         PROC MEANS (age / BMI / gestational weeks)
  t006_genmod_poisson_rr     PROC GENMOD poisson log-link, repeated GEE

Each bundle carries the script, a two-line autoexec, a captured log and
listing, and an expected.json of the fields to re-check. External matern
libname datasets are stood in for by small inline samples matching the
columns each step reads, so nothing outside jenner-check/ is touched and
nothing runs on merge.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant