Targets
Warehouses
Runtimes
Before migration
After migration
DATA step, PROC SQL, and macros parsed structurally. Emitted as Snowflake SQL and Snowpark where SQL is not enough. Tasks replace the SAS scheduler.
Deterministic parsers read the SAS estate and emit native Snowflake code, not SAS replayed through a warehouse connector.
SAS programs → SAS2PY parser → SQL + Snowpark + Tasks
SAS2PY Parser
Deterministic parse
AI where it helps
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.
Most SAS estates are SQL wearing a SAS costume. We emit native Snowflake SQL so the compute that bills you is the compute that runs the join.
Expanded once, then written as procedures and views a Snowflake engineer can own.
SAS Grid queues become Snowflake Tasks. No extra scheduler appliance.
A SAS PROC SQL join with a calculated segment, emitted as Snowflake SQL, not a cursor loop.
/* SAS PROC SQL */
proc sql;
create table gold as
select c.cust_id, t.amount,
case when t.amount > 1000 then 'GOLD'
else 'STD' end as segment
from cust c, txn t
where c.cust_id = t.cust_id;
quit;
-- PROC SQL → Snowflake
CREATE OR REPLACE TABLE gold AS
SELECT c.cust_id, t.amount,
CASE WHEN t.amount > 1000 THEN 'GOLD'
ELSE 'STD' END AS segment
FROM cust c
JOIN txn t ON c.cust_id = t.cust_id;
Implicit SAS join becomes an explicit JOIN. The CASE is already the target language.
| SAS | Snowflake | Notes |
|---|---|---|
| PROC SQL | Snowflake SQL | Joins, GROUP BY, QUALIFY |
| DATA step | SQL / Snowpark | Set-based rewrite |
| Macro | Expanded SQL | No leftover %LET |
| SAS dataset | Snowflake table | DDL from schemas |
| SAS Grid | Tasks + Streams | Warehouse-native |
| Formats / informats | Mapped types | Date and numeric |
SAS output compared to Snowflake output: row by row, column by column. Differences flagged before sign-off.
See how Data Matching works →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 →