Start here →

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

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 optional
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

AI is an optional add-on, off by default — the conversion runs end to end without it, 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

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 →
1,900
scripts
9 mo
duration
$4.0M
saved
HIPAA
controls

Healthcare Provider: 1,900 SAS scripts to BigQuery

Patient analytics and claims processing modernized to BigQuery and Dataform. HIPAA-compliant serverless scale, $4.0M saved in 9 months.

Read the case study →