NEW Qlik to dbt migration AI Proof Pricing Book a demo Get the free assessment

Hard sources

Also parsed

Targets

Warehouses

Runtimes

Before migration

After migration

Convert SAS programs to AWS

DATA step and macros parsed structurally. Emitted as Spark jobs on EMR or Glue, landing on S3. MWAA replaces the SAS scheduler.

Architecture

How does SAS become AWS? SAS in. AWS out.

Deterministic parsers read the SAS estate and emit native AWS code, not SAS on an EC2 instance.

SAS programs → SAS2PY parser → Spark + S3 + Glue

SAS
Base SAS DATA step / macros
DI Studio Jobs + mappings
EG / EM Projects + flows
Viya / CAS CASL + actions
SAS2PY Parser
Deterministic parse AI where it helps
Row-level parity Before cutover
Spark emit EMR / Glue
DAG emit MWAA
AWS
Spark jobs EMR or Glue
S3 Iceberg / Delta
Glue catalog Replaces SAS libs
MWAA Replaces SAS Grid
CodePipeline CI/CD
Lambda Non-SQL remainder

MigryX AI handles the logic parsers cannot resolve alone, and every change it makes goes through the same parity checks. It runs on a model you approve, air-gapped if your estate requires it.

Why AWS

S3 is the library. Spark is the engine.

SAS on EC2 is lift-and-shift

The license follows you. The overnight window follows you. We emit Spark that reads S3.

Glue catalogs beat SAS libraries

Parsed schemas become Glue tables. Lineage is a catalog, not a comment.

Grid is an ops team

MWAA or Step Functions take the schedule. The 36-node Grid is gone.

Parser output

SAS library to an S3 table

A SAS libname plus a DATA step filter, emitted as Spark reading a Glue table on S3.

SAS
/* SAS */
libname dw 'sasdata';
data gold;
  set dw.txn;
  if amount > 1000;
run;
→
SAS2PY
converts
PySpark on AWS
# libname → Glue / S3
gold = (
    spark.table("dw.txn")
         .filter("amount > 1000")
)
gold.write.format("delta").save("s3://lake/gold")

The SAS library is a catalog entry. The filter is a DataFrame predicate.

Coverage

SAS to AWS: artifact mapping

SASAWSNotes
DATA stepPySpark on EMR / GlueSet-based
PROC SQLSpark SQL / AthenaSame joins
SAS datasetS3 + Iceberg / DeltaObject storage
SAS GridMWAA / Step FunctionsScheduler
MacroExpanded then emittedNo leftover SAS
Validation

How is the conversion proven? Every conversion validated to row-level parity

SAS output compared to AWS output: row by row, column by column. Differences flagged before sign-off.

See how Data Matching works →
18
SAS engagements
16
on Spark

Proven with regulated enterprises

28 regulated enterprises, including six global systemically important banks, have modernized with MigryX. Customer names are shared under NDA in a demo, with reference calls on request.

See all engagements →