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 BigQuery on Google Cloud

DATA step and PROC SQL parsed structurally. Emitted as set-based BigQuery SQL and Dataform models. Cloud Composer replaces the SAS scheduler.

Architecture

How does SAS become Google Cloud? SAS in. Google Cloud out.

Deterministic parsers read the SAS estate and emit native Google Cloud code, not SAS rehosted on a GCE VM.

SAS programs → SAS2PY parser → BigQuery + Dataform + Composer

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
SQLX emit Dataform models
DAG emit Composer
Google Cloud
BigQuery Set-based SQL
Dataform Governed models
Cloud Composer Replaces SAS Grid
Cloud Functions Non-SQL remainder
IAM + CLS Least privilege
Git repos Reproducible packs

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 Google Cloud

Serverless SQL, not another SAS box

SAS Grid capacity planning never ends

BigQuery bills the query, not the box. No cluster to size for month-end.

Macros have no Git history

Dataform models are versioned, tested, and have declared dependencies.

HIPAA and VPC controls are table stakes

The modernization lands inside your project, with IAM and column-level security from the parsed lineage.

Parser output

SAS RETAIN to a BigQuery window

A DATA step running total with a BY-group reset, emitted as a window function, not a retained variable.

SAS
/* SAS running balance */
data gold;
  set txn;
  by account_id month;
  if first.month then bal = 0;
  bal + amount;
run;
→
SAS2PY
converts
BigQuery SQL
-- RETAIN → window function
SELECT account_id, month, amount,
  SUM(amount) OVER (
    PARTITION BY account_id, month
    ORDER BY txn_date
    ROWS UNBOUNDED PRECEDING
  ) AS bal
FROM txn;

RETAIN and FIRST. become a window frame. The BY-group is a PARTITION BY.

Coverage

SAS to Google Cloud: artifact mapping

SASGoogle CloudNotes
PROC SQLBigQuery SQLStandard SQL emit
DATA step RETAINWindow functionsRunning totals
MacroDataform SQLXParameterized models
SAS datasetBigQuery tablePartition + cluster
SAS GridCloud ComposerDAG orchestration
Validation

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

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

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

SAS to Google Cloud at one of the largest banks in Australia and New Zealand

Customer names are shared under NDA in a demo, with reference calls on request.

See all engagements →