Enterprise Guide (EG) is the workhorse of SAS tools. Every day, thousands of citizen data scientists, analysts, data engineers and data scientists log-in and do much of their work from this tool. It was at the time (25+ years ago), one of the best designed tools for data professionals. With intuitive wizards for importing/exporting data, building queries, graphs and generating code, it was liked by both die hard developers, and citizen data scientists/analysts with no coding experience. While it’s still the goto tool for most SAS users, like everything else at SAS, its very much showing its age these days.
IT departments have always hated SAS, but they hold a particular hatred of EG. With its heavy client side Windows only architecture, it is a nightmare to support, requiring clumsy and costly desktop management tools. It has little support for modern IT, security, or data concepts (or even SAS’ own bizarre Viya platform). Within SAS, it’s really a deprecated tool in maintenance mode. But, for SAS users it’s still seeing lots of use, in large part because there’s nothing else like it; or is there?
Enterprise Guide Alternatives
While notionally, there’s SAS Studio (aka Viya workbench), it’s a far cry from the functionality embedded inside the legacy SAS EG. Not only that, any new features and functionality that have been developed over the past decade have been focused towards the incompatible “new” SAS (SAS Viya), which no user actually knows how to use (or cares to learn). They all want to work and code in “classic” SAS (SAS9). There’s a good reason that Viya is not called SAS10, because it bears little resemblance or compatibility with SAS9.
Open Source Alternatives Are Disappointing
The open source Python world has sadly been dominated by sub-par notebook interfaces. Jupyter notebook is the 350KG gorilla in this space, with a number of derivatives (e.g. Google Colab), but few alternatives.
The once sleek Apache Zeppelin, which was developed from the ground up for PySpark, looked at one point to be able to supplant Jupyter’s dominance. Unfortunately it suffered from a lack of developers, partly because it was written in Java, but used in Python. The few developers actively working on it were hired by competing proprietary tools. While I’m sure it wasn’t a deliberate attempt to crush an open-source competitor, it conveniently had that effect. Now, releases happen only when all the planets are in alignment, so the project has effectively been abandoned.
What Is Wrong With Jupyter Notebook?
While developers may differ in their opinions, here are a list of the main criticisms of Jupyter:
-
Hidden state problem can cause reproducibility issues and can lead to misleading and possibly dangerous results
-
Doesn’t produce regular Python Code, notebooks are stored in a JSON format
-
JSON file format may include results, which can inadvertently leak data when shared with others
-
Code versioning and collaboration with other developers is very difficult
-
Non-linear execution and workflow means constant scrolling to fix broken code
-
Not suitable for running long asynchronous tasks – Large ETL processes need to be in another tool
-
Lack of IDE like features
-
Lack of integration with the industry standard PySpark platform
-
Batteries not included approach = lots of add-ons = security nightmare
-
No native interface widgets to create simple applications
-
No “Report” mode to have simple interfaces for non-developers to consume workflows
-
Unfriendly for citizen data scientists, no low-code/no-code functionality
-
Encourages bad coding behaviors
In Search Of Something Better
Ever since leaving SAS development behind, more than a decade ago, I’ve yearned for a better workbench or notebook application. While I love working in IDE’s for building complex systems, when working with data, I much prefer to have a more purpose built tool. But, I’ve always disliked Jupyter notebook. For me, discovering Marimo was like discovering Python and Apache Spark more than 10 years ago. It was exactly the tool I’ve been searching for all this time. The icing on the cake is that it’s entirely built in Python, and pip installable. Despite being relatively new project, it already has a active community of developers and data professionals behind it with over 4M downloads.
What Makes Marimo So Special?
We’ll get talk features shortly, but what stands out with Marimo are a few key design decisions, that together enable it to address the many challenges of using Jupyter and other notebooks.
Firstly, Marimo is Reactive by design, which means it keeps track of dependent cells and re-runs them as necessary. In contrast, Jupyter contains hidden state, that is dangerous in the sense that the results may be inaccurate. Marimo’s reactivity by design is not just safer, it also leads to all kinds of use cases that just aren’t possible in non-reactive environments (think simple data driven apps). That dependency tracking also allows you to visualize your workflows automatically through a mini-map or dependency tree. Of course the reactivity is also able to be disabled at various levels, but it still provides a visual indication that the cell is stale.
Marimo notebooks are also stored as pure Python files (.py extension), and are executable outside of the notebook environment. No need to have a separate deployment process for production ETL workflows. This also means that your favourite Git based versioning/DevOps tools and Python IDE’s just work with it. In fact, there’s even a plugin to VSCode that allows you to edit the notebook in VSCode and see the results live in a separate tab along side it.
Those design decisions, enable seamless workflow transitions between research and exploratory data analysis, reporting, production ETL pipelines and even data applications.
Some of the other killer features of Marimo include:
- AI-native coding with built-in AI assistance (OpenAI, Gemini, Anthropic, Ollama)
-
SQL & data tools: Query databases directly, manipulate dataframes interactively
-
Deployable code as apps: Turn notebooks into shareable WASM web apps with one command
-
Interactive Widgets to build code prompts (No Callbacks Needed!)
-
Powerful code editor with dynamic code completion, object tracking, integrated documentation and debugging tools
-
Nudges user to write better code by making those patterns work more seamlessly in the notebook
-
Support for Python, SQL (many DB’s supported) and Markdown
-
Dataframe tracking, with built-in data schema viewer
-
Robust package features – sandbox mode tracks packages used including versions
-
Point-and-click data code generation for integration, data import/export, data transformation and chart creation
-
Interactive plots and charts
-
Shareable code snippets with an already thriving community
-
Cell-by-cell performance tracing
-
Secrets/credentials management (external to code)
A table summarizing differences between Marimo with Jupyter and SAS EG
|
Feature |
SAS EG |
Jupyter |
Marimo |
|---|---|---|---|
|
Reactive Updates |
❌ Hidden state |
❌ Hidden state |
✅ Auto-syncs cells |
|
Git-Friendly |
❌ No, proprietary EGP |
❌ JSON = huge diffs |
✅ Clean |
|
Interactive Widgets |
❌ Basic prompts |
❌ Needs extensions |
✅ Reactive (no callbacks) |
|
SQL Built-In |
✅ SQL/Query builder |
❌ Needs extensions |
✅ Integrated |
|
AI Coding Help |
❌ |
❌ |
✅ Built-in (mult. providers) |
|
Deploy as WebApp |
❌ Requires server |
❌ |
✅ (no extra code) |
|
Package Mgmt/Tracking |
N/A |
❌ |
✅ Supports sandboxing |
|
Point&Click Codegen |
✅ Legacy SAS code |
❌ |
✅ Modern Python |
10x+ Productivity – A Pipe Dream Or Reality
If you are a manager or executive, you know that your data professionals are one of your most precious resources. Making sure they can operate at peek performance should be at the top of your priority list. With simpler API’s and 10-100x execution performance, data professionals using Python and PySpark are easily 5x more efficient than those using SAS9 based tools like EG. But what if we could do more; what if the coding interface itself could enable further step changes in productivity? That’s really what using Marimo means, getting way more for way less – the ultimate force multiplier.
At WiseWithData, we’re all huge fans of this revolution in data science notebooks. For existing SAS developers, we believe it is the perfect modern replacement for legacy Enterprise Guide. Our migrated code is completely portable to Marimo, and supports many other target environments. And, with our SPROCKET mirrored code technology, we bring the look-and-feel of the SAS code right into Python PySpark, so your users will be immediately productive. Learn more – reach us at hello@wisewithdata.com today.
*All product or company names are trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.