Source parsing
Decompose programs into jobs, steps, statements, tables, variables, expressions, procedures and source positions.
ELSii analyses SAS source programs and uses available execution logs where needed to recover runtime-resolved code, particularly macro-generated SAS. It then resolves the relationships into a structured lineage model that preserves the evidence behind each conclusion.
data mart.customer;
set work.customer_base;
age = intck('year',dob,today());
run;
MPRINT(BUILD): PROC SQL; CREATE TABLE WORK.X AS SELECT ...
Source parsing → runtime reconstruction → semantic enrichment → physical identity and instance resolution → canonical links and calculation records.
ELSii preserves the evidence behind a lineage conclusion: the program and step, source position, logical and physical table identity, individual table and variable instances, including successive inputs and outputs, expressions and resolution status. Repeated overwrites of the same SAS table can therefore be represented as distinct instances rather than flattened into one object.
A SAS dataset name by itself is not enough to describe lineage reliably. The same name may be created, overwritten and consumed several times within an estate. ELSii therefore keeps the execution context and reconstructs individual table and variable instances, so a downstream dependency can be linked to the appropriate upstream version rather than merely to a matching name.
The model also retains supporting evidence. A lineage relationship can be connected back to its program, step, statement, source position, physical library location and calculation context. This makes the lineage inspectable and auditable rather than just visually plausible.
Decompose programs into jobs, steps, statements, tables, variables, expressions, procedures and source positions.
Where needed, recover macro-generated SAS from execution logs and analyse the resolved code.
Resolve table membership, input/output relationships, KEEP/DROP/RENAME behaviour, calculations and supporting metadata.
Connect logical SAS names to physical library locations so identically named tables can be distinguished.
Represent individual table inputs, outputs and successive overwrites, connecting the correct upstream and downstream versions.
Produce evidence-backed JSON and interactive HTML lineage views for analysis, integration and review.
| Source structure | Jobs, steps, statements, code elements, procedures, tables, variables, expressions and source coordinates. |
| Dataset semantics | Input/output relationships plus KEEP, DROP, RENAME and related dataset behaviour. |
| Physical identity | Logical SAS names connected to physical library locations so identically named assets can be distinguished. |
| Instance lineage | Individual table inputs, outputs and repeated overwrites, including the upstream/downstream versions they connect. |
| Calculation evidence | Derived-variable expressions and dependencies prepared for normalized calculation analysis. |
The model is designed to answer practical questions about both provenance and impact: what created this table or column, which exact version was involved, what expression changed it, what are its ultimate sources, and what downstream assets depend on it?
Identify where data is read, created, replaced and passed onward.
Trace variables through renames, carry-forward logic, joins and transformations.
Capture the expression used to create a derived column and its upstream dependencies.
Use execution logs to analyse code that only becomes visible after macro resolution.
Keep lineage connected to the SAS program and statement context that produced it.
Make gaps visible rather than presenting uncertain lineage as fact.
A SAS program can contain a macro call rather than the final statements that execute. Where runtime context is needed, ELSii uses execution logs to recover the resolved SAS and analyse the code that actually ran.
The practical goal is to automate as much lineage as possible, identify what remains uncertain and give teams a clear basis for targeted manual review. Complex SAS estates contain constructs where the available evidence may be incomplete or where a relationship cannot yet be resolved with sufficient confidence.
ELSii keeps those distinctions visible. A supported relationship, a fallback inference and an unresolved item should not all look the same simply because a graph can draw an arrow between two objects.
This matters for migration planning because the unresolved portion is itself useful information. It tells a team where investigation is still required and helps separate automated discovery from the manual work that remains.
The aim is a lineage model that can show both what ELSii has established and where further review is required.
ELSii captures the lineage, execution context and supporting metadata needed to understand how SAS data and logic move through an estate.