<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAS Users</title>
	<atom:link href="https://blogs.sas.com/content/sgf/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.sas.com/content/sgf/</link>
	<description>Providing technical tips and support information, written for and by SAS users.</description>
	<lastBuildDate>Mon, 17 Aug 2026 18:49:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6</generator>
	<item>
		<title>Python your way: 6 ways to run Python in SAS Viya</title>
		<link>https://blogs.sas.com/content/sgf/2026/08/13/python-your-way-6-ways-to-run-python-in-sas-viya/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/08/13/python-your-way-6-ways-to-run-python-in-sas-viya/#respond</comments>
		
		<dc:creator><![CDATA[Stu Sztukowski]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 17:15:26 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[GitHub Copilot]]></category>
		<category><![CDATA[JupyterLab]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[Open Source Integration]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SAS Viya Workbench]]></category>
		<category><![CDATA[VS Code]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55557</guid>

					<description><![CDATA[<p>Want the flexibility of modern Python development with the power of SAS behind it? Explore how SAS Viya Workbench combines familiar tools, on-demand compute, and Python-native access to advanced SAS algorithms in a single browser-based environment.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/08/13/python-your-way-6-ways-to-run-python-in-sas-viya/">Python your way: 6 ways to run Python in SAS Viya</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Python developers have more options than ever for working with SAS<sup>®</sup> Viya<sup>®</sup>. Whether you prefer VS Code, JupyterLab, notebooks or another workflow, there's no single "right" way to build. The best approach depends on how you work, your team's requirements and the problems you're trying to solve.</p>
<p>During my SAS Innovate 2026 session, I shared <a href="https://www.youtube.com/watch?v=XhBuDrTy0cY">six different ways to run Python in SAS Viya</a>. I know, I didn't follow the standard presentation rule of only giving lists in 1, 3, 5 or 10 because apparently any number in between makes people uncomfortable. I just had too much to say in too little time.</p>
<p>This blog series is my chance to dive deeper into each approach than I could during the presentation. Think of it as the Director's Cut. Rumor has it <em>Project Hail Mary</em> was nearly four hours long before they trimmed it down to two and a half. Don't worry – I'm not going to make you read that much. But I am looking forward to that release.</p>
<p>Everyone has their preferred way to develop. And in some cases, a way they're required to develop. I'm not here to tell you which approach is best, because there is no "best." My goal is to show you the options. Yes, I have my favorites. You probably have yours, too. Of the six, you might only want one. Or maybe company policy, infrastructure or security requirements narrow your choices for you. That's okay. You've got options.</p>
<p>I'm starting this series a little differently than I did in the presentation by beginning with SAS Viya Workbench. It's one of my favorite environments for rapid development and experimentation, especially when I want a familiar, high-performance Python workflow that won't make my laptop sound like a Boeing 747 on takeoff.</p>
<h2>Part 1 - SAS Viya Workbench</h2>
<p>SAS Viya Workbench has a familiar browser-based Python development environment with that laptop experience you know and love, plus powerful compute you can choose on the fly, GPU support, and the governance IT departments expect. Open-source developers want to experiment quickly and with few boundaries. You see a popular package out there on GitHub and you want to see what it’s all about. Maybe you want to build it into your workflow. Maybe you want to iterate with it in dozens of ways. Maybe even break a few things along the way.</p>
<p>SAS Viya Workbench gives you that speed and autonomy without giving up the tools you already know. Here’s how.</p>
<h3>It’s <em>your</em> environment</h3>
<p>You. Yours. No one else’s.</p>
<p>This is your space to work the way <em>you</em> want to work. Spin it up, shut it down, run out of memory, restart it, use a bigger server, use a smaller server, try new stuff, make another workbench, throw things at the wall and see what sticks. If <em>Technologic</em> by Daft Punk is stuck in your head now, I’m sorry. Or you’re welcome.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code.png"><img fetchpriority="high" decoding="async" class="alignright size-full wp-image-55569" src="https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code.png" alt="" width="783" height="522" srcset="https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code.png 1044w, https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code-300x200.png 300w, https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code-1024x683.png 1024w, https://blogs.sas.com/content/sgf/files/2026/08/Python-and-SAS-in-VS-Code-768x512.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></a></p>
<p>Want Python and SAS in VS Code? Done.</p>
<p>VS Code extensions? The marketplace awaits.</p>
<p>Prefer JupyterLab instead? Sure.</p>
<p>Want to see how far you can push it? Ramp up to the biggest server.</p>
<p>Want to see how efficient you can be? Shrink down to the smallest server.</p>
<p>Environment variables? Just open the settings menu and add them.</p>
<p>Virtual environments? Have at it.</p>
<p>Need external storage? Add a volume.</p>
<p>Git? Git ‘er done.</p>
<p>It’s all right here in your browser, and it feels darn near indistinguishable from the desktop tools you already know. Your IT department will appreciate it, too: <a href="https://www.youtube.com/watch?v=6jzkae0enoY">the entire setup process is covered in this video in just over 9 minutes</a> and is a self-service infrastructure once it’s set up. Configured, customizable for your needs, ready to go, and ready for you to dive in. I seriously love programming like this.</p>
<h3>GitHub Copilot at your service</h3>
<p>GitHub Copilot is there and ready to help you build. This isn’t some watered-down version of VS Code. This is VS Code the way you expect it in a modern development environment.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service.png"><img decoding="async" class="aligncenter size-large wp-image-55611" src="https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-1024x629.png" alt="" width="702" height="431" srcset="https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-1024x629.png 1024w, https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-300x184.png 300w, https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-768x471.png 768w, https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-1536x943.png 1536w, https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service.png 1590w" sizes="(max-width: 702px) 100vw, 702px" /></a></p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/08/workbench-github-copilot-vscode-1MB.gif"><img decoding="async" class="aligncenter size-full wp-image-55605" src="https://blogs.sas.com/content/sgf/files/2026/08/workbench-github-copilot-vscode-1MB.gif" alt="" width="640" height="360" /></a></p>
<h3>Bash away</h3>
<p>Have you ever been on a system and wished you had shell access to run some Bash scripts? Or maybe you just want to build a Python virtual environment? Hit Ctrl + Shift + ~ and voilà: your terminal awaits your commands. Want uv to manage your virtual environments? U’ve got it. <a href="https://docs.astral.sh/uv/">uv makes dependency management easy</a> and you can use it in SAS Viya Workbench.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/08/workbench-bash-terminal.gif"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55584" src="https://blogs.sas.com/content/sgf/files/2026/08/workbench-bash-terminal.gif" alt="" width="932" height="217" /></a></p>
<h3>Built with Python in mind</h3>
<p>There’s a good reason why VS Code, JupyterLab, and Jupyter Notebooks are the three main ways to work with Python in SAS Viya Workbench. VS Code and notebooks are familiar territory for Python programmers. Whether you want to write .py files or iterate cell by cell in a notebook, SAS Viya Workbench gives you familiar development options and the flexibility to switch as you work.</p>
<p>Wait, we’ve talked a lot about Python here. Isn’t it called <em>SAS Viya</em> Workbench? Where is SAS in all this? For starters, it comes with a <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwballprodsle/titlepage.htm">high-performance SAS environment</a> that includes the <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/workbenchanwlcm/home.htm">latest SAS Viya machine learning algorithms</a> and open data access methods like Parquet and DuckDB. These are all accessible from the pre-installed SAS extension for VS Code. And yes, it <em>does</em> support Enterprise Guide. But that’s just the beginning.</p>
<p>If you’re a pure Python programmer, you probably don’t want to even hear the word PROC.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/08/Built-with-python-in-mind.png"><img loading="lazy" decoding="async" class="alignright size-full wp-image-55617" src="https://blogs.sas.com/content/sgf/files/2026/08/Built-with-python-in-mind.png" alt="" width="424" height="345" srcset="https://blogs.sas.com/content/sgf/files/2026/08/Built-with-python-in-mind.png 424w, https://blogs.sas.com/content/sgf/files/2026/08/Built-with-python-in-mind-300x244.png 300w, https://blogs.sas.com/content/sgf/files/2026/08/Built-with-python-in-mind-168x137.png 168w" sizes="(max-width: 424px) 100vw, 424px" /></a></p>
<h2><strong>We know. We get it.</strong></h2>
<p><a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbpygs/p018t2lxmjxl0un1k9c3vp0fgayi.htm">That’s exactly why we built the sasviya package</a>. sasviya is your Pythonic access point to SAS’s algorithms. You may be wondering, “Do I need to learn a <em>whole new</em> package syntax?”</p>
<p>No.</p>
<p>Do you know <strong>scikit-learn</strong>? Then you know <code class="preserve-code-formatting">sasviya.ml</code></p>
<p>Do you know <strong>NetworkX</strong>? Then you know <code class="preserve-code-formatting">sasviya.network</code></p>
<p>Do you know <strong>Pillow</strong> and <strong>OpenCV</strong>? Then you know <code class="preserve-code-formatting">sasviya.cv</code></p>
<p>Adherence to PEP standards, community standards, and compatibility with popular Python packages are an extraordinarily important part of sasviya. We don’t take this lightly: you’ll see <em>few, if any, </em>SAS language elements in these packages. That’s how committed we are. After all, the incredible engineers here at SAS are programmers, too. They get it.</p>
<p>Why would you want to use these models over others? Let’s take a look.</p>
<h3>High-performance SAS algorithms in a way you understand</h3>
<p>Back when I was a data scientist, I built a lot of machine learning and AI models with SAS. From forecasting to gradient boosting to deep neural networks, I worked with massive amounts of data without needing to think much about it. SAS algorithms and SAS itself as an engine are both really good at dealing with complex data that’s hard to compute.</p>
<p>I wrote about this in one of my blogs, <a href="https://blogs.sas.com/content/sgf/2025/06/13/boost-ml-accuracy-with-hyperparameter-tuning/">Boost ML Accuracy with hyperparameter tuning</a><em>,</em> where I took an 11M x 21 dataset and ran it through the autotuning gamut on a modest 16-core, 64 GB RAM server with <code class="preserve-code-formatting">sasviya.ml.tree.GradientBoostingClassifier</code>. In fact, I gave it a try with five separate default models, all of which ran without issue.</p>
<p>I initially tried it with scikit-learn, and it took nearly 45 minutes to complete one model. Switching over to <code class="preserve-code-formatting">sasviya.ml</code> was as easy as changing my import statement:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> sasviya.<span style="color: black;">ml</span>.<span style="color: black;">tree</span> <span style="color: #ff7700;font-weight:bold;">import</span> GradientBoostingClassifier
&nbsp;
model <span style="color: #66cc66;">=</span> GradientBoostingClassifier<span style="color: black;">&#40;</span>
    n_bins<span style="color: #66cc66;">=</span><span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span>
    n_estimators<span style="color: #66cc66;">=</span><span style="color: #ff4500;">100</span><span style="color: #66cc66;">,</span>
    max_depth<span style="color: #66cc66;">=</span><span style="color: #ff4500;">3</span><span style="color: #66cc66;">,</span>
    min_samples_leaf<span style="color: #66cc66;">=</span><span style="color: #ff4500;">20</span><span style="color: #66cc66;">,</span>
    learning_rate<span style="color: #66cc66;">=</span><span style="color: #ff4500;">0.1</span><span style="color: #66cc66;">,</span>
    random_state<span style="color: #66cc66;">=</span><span style="color: #ff4500;">42</span>
<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>If you’ve used scikit-learn, that should look very familiar to you. <code class="preserve-code-formatting">sasviya.ml</code> models also come with a few other nice bonuses beyond just the basics:</p>
<ul>
<li>They accept Pandas DataFrames, Polars DataFrames, PyArrow tables, and DuckDB queries natively <em>without any internal copying</em></li>
<li>No one-hot encoding necessary: give it categories and sasviya just handles it</li>
<li>Generate pre-built, customized plots for supported models with <code class="preserve-code-formatting">customize_results()</code></li>
<li>Get model details through <code class="preserve-code-formatting">describe()</code> that you would otherwise need to calculate yourself</li>
<li>Pickle a model or export it as an Analytic Store (ASTORE) to easily run in enterprise Viya</li>
<li>Some models, such as <code class="preserve-code-formatting">LogisticRegression</code>, produce results that match the equivalent SAS PROC with default settings, making validation and comparison easier</li>
</ul>
<p>If you’re a SAS programmer, you might be looking at this and thinking “Well yeah, I do this all the time. Those are some of my favorite parts of SAS: the speed, the built-in one-hot encoding, the diagnostics, the graphs, the model transportability, and the consistency.”</p>
<p>That’s precisely the idea: bring the best parts of SAS to Python. And we’re continuing to do that today thanks to your feedback.</p>
<h2>Wrapping this first one up</h2>
<p>There’s a lot to love about SAS Viya Workbench if you’re a Python programmer, and even more to love if you know SAS, too. It gives you a flexible place to build, test, and iterate without being constrained by the thin little rectangle whirring away on your desk. And if you work with SAS programmers, you’ll like the ease of being able to share code and models between each other. These days, I find myself reaching for SAS Viya Workbench for Python and SAS programming more often than my own laptop. Sometimes I need more compute. Other times I want to try something crazy that could make my computer come to a screeching halt or bring down a shared dev box. I always have the latest and greatest algorithms from SAS, and I don’t need to reinstall anything to get them. It’s simply just there.</p>
<h2>Links</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=XhBuDrTy0cY">SAS Innovate 2026 Presentation – Python Your Way: 6 Ways to Run Python in SAS Viya</a></li>
<li><a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_077/pywlcm/home.htm?fromDefault=">SAS Documentation – Python and SAS Integrations</a></li>
<li><a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbpygs/p018t2lxmjxl0un1k9c3vp0fgayi.htm">SAS Documentation – About the sasviya Package</a></li>
<li><a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/workbenchacwlcm/home.htm">SAS Documentation – Access Data</a></li>
<li><a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/workbenchanwlcm/home.htm">SAS Documentation – Advanced Analytics</a></li>
<li><a href="https://github.com/sascommunities/sas-viya-workbench-examples/tree/main">SAS Viya Workbench Examples</a></li>
<li><a href="https://marketplace.microsoft.com/en-us/product/saas/sas-institute-560503.sas-viya-workbench?tab=overview">SAS Viya Workbench on the Azure Marketplace</a></li>
<li><a href="https://aws.amazon.com/marketplace/pp/prodview-oyybm2xk34dos">SAS Viya Workbench on the AWS Marketplace</a></li>
<li>Looking for more ready-to-go SAS tools on the Azure Marketplace?<br />
<a href="https://communities.sas.com/t5/SAS-Communities-Library/Comparing-SMOTE-MST-and-Bayesian-Networks-for-Synthetic-Data/ta-p/989601">Check out SAS Data Maker and its wide range of data generation methods</a></li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/08/13/python-your-way-6-ways-to-run-python-in-sas-viya/">Python your way: 6 ways to run Python in SAS Viya</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/08/13/python-your-way-6-ways-to-run-python-in-sas-viya/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/08/Github-Copilot-At-Your-Service-150x150.png" />
	</item>
		<item>
		<title>Modernization lessons from Posten Bring and Regeneron</title>
		<link>https://blogs.sas.com/content/sgf/2026/08/07/modernization-lessons-from-posten-bring-and-regeneron/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/08/07/modernization-lessons-from-posten-bring-and-regeneron/#respond</comments>
		
		<dc:creator><![CDATA[Susan Kahler]]></dc:creator>
		<pubDate>Fri, 07 Aug 2026 16:25:01 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[customer story]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[Modernization]]></category>
		<category><![CDATA[SAS Administrators]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55509</guid>

					<description><![CDATA[<p>Posten Bring and Regeneron demonstrate that successful modernization to SAS Viya is not just a technical migration but a strategic transformation that combines cloud scalability, governance, user adoption, and disciplined planning to help organizations become more agile, efficient, and future-ready.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/08/07/modernization-lessons-from-posten-bring-and-regeneron/">Modernization lessons from Posten Bring and Regeneron</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The best migrations don’t just move workloads. They move organizations forward.</p>
<p>Migration is often described in technical terms: workloads moved, systems retired, data transferred, users onboarded. Those measures matter. But they do not tell the whole story. The real value of modernization shows up when organizations use migration to rethink how they work, scale and prepare for what comes next.</p>
<p>That idea comes through clearly in two SAS customer stories: Posten Bring, a Nordic postal and logistics company with nearly 400 years of history, and Regeneron, a leading life sciences company building a modern statistical computing environment. Their industries, operating models and modernization paths are different. Yet both arrived at the same conclusion: successful migration requires strategy, discipline, user trust, a clear reason to change and a strong partnership with SAS.</p>
<h2>Posten Bring: Move the organization forward, not just the systems</h2>
<p>For Posten Bring, modernization was a continuation of a much longer story of adaptation. Founded in 1647, the company has reinvented itself many times. In recent decades, digitalization reduced mail volumes by about 80%, while logistics became a larger part of the business. Data became central to how Posten Bring improved operations, increased production efficiency and competed in a changing market.</p>
<p>SAS has supported Posten Bring since 1999, but the company’s SAS 9.4 on-premises environment had reached its limits. Capacity constraints limited real-time capabilities, weaker API support and rising demand from users who needed faster access to better data made modernization necessary. As the Posten Bring team put it, SAS 9.4 had helped get them there, but it could not take them further. Their next step was to modernize with SAS Viya for streaming data, integrated analytics, a fast modern database, and scalable cloud with SAS Managed Cloud Services.</p>
<div style="display: flex; align-items: flex-start; gap: 20px; flex-wrap: wrap;">
  <iframe loading="lazy"
    width="560"
    height="315"
    src="https://www.youtube.com/embed/JM2Hq0Ytv1A?si=Bnb8rNNipvPLHqVP"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen><br />
  </iframe></p>
<div style="max-width: 250px; font-size: 0.9em; color: #555;">
    <strong>Warning:</strong> This video shows Posten Bring deleting a SAS 9.4 production system during a Microsoft Teams meeting. Please do not try this at home, or at work, unless the migration is complete, the results are validated and maybe a stress ball is nearby.
  </div>
</div>
<p>The work was complex. Posten Bring moved 20 years of legacy code, thousands of ETL jobs across 35 BI solutions, hundreds of SAS Enterprise Guide projects, and tens of terabytes of data from on-premises systems to SAS&reg; Viya&reg; with SAS Managed Cloud Services and SAS SpeedyStore. And the technical work was only part of it. The team also had to upskill hundreds of users and change how people worked so they could take advantage of the new Viya platform.</p>
<p>Along the way, the team worked through data migration challenges, integrations, network and firewall requirements, character and collation issues and the practical question of what should move. The project also showed the strength of the SAS partnership. When serious issues surfaced, the teams worked together to solve them and adapt the software to support Posten Bring’s business needs.</p>
<p>Several lessons extended well beyond the migration itself:</p>
<ul>
<li>Require every migrated workload to have a clear owner. If no one owns it, do not move it.</li>
<li>Start data and integration work early, especially when moving from on-premises to cloud.</li>
<li>Plan for format, collation, character setting, networking and firewall challenges.</li>
<li>Onboard users early, even when feedback is tough, so the team can correct course before the migration scales.</li>
</ul>
<p>The results show both technical progress and organizational change. Legacy ETL workloads ran faster on Viya. Users saw even greater improvements when they optimized their own projects. The company moved to full version control and DevOps-style deployment practices, with 1,100 commits to its production repository in 2026 alone. It also onboarded 1,400 users, more than 10% of the company, to actively use SAS Viya for analytics and reporting.</p>
<p>Posten Bring’s migration mantra is clear: migration is not just about moving systems. It is about moving the organization forward.</p>
<h2>Regeneron: Strategy drives execution</h2>
<p>Regeneron’s story reinforces the modernization theme from a different perspective. The company set out to “accelerate data to insight” by building a modern, multilingual statistical computing environment around SAS Viya. The goal was not simply to replace SAS 9.4 or SAS Grid. It was to create a broader analytical ecosystem designed for the way regulated life sciences teams need to work today and in the future.</p>
<table style="border: none; width: 100%;">
<tr>
<td style="vertical-align: top; padding-right: 20px; width: 560px;">
      <iframe loading="lazy"
        width="560"
        height="315"
        src="https://www.youtube.com/embed/CfQ-JaVrGdU?si=tZTvUTfiN_nsrCVm"
        title="YouTube video player"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
        referrerpolicy="strict-origin-when-cross-origin"
        allowfullscreen><br />
      </iframe>
    </td>
<td style="vertical-align: top;">
<p><strong>Regeneron grounded its approach in five principles:</strong></p>
<ul>
<li>Connectivity to trusted data sources.</li>
<li>Scalability and elasticity.</li>
<li>Best-in-breed tools.</li>
<li>A cohesive user experience.</li>
<li>Governance built in from the start.</li>
</ul>
</td>
</tr>
</table>
<p>In clinical research, governance is not an add-on. It is fundamental to protecting sensitive patient data, supporting auditability, and proving that outputs were produced in a controlled, compliant way.</p>
<p>Regeneron also recognized that users need choice without fragmentation. Its unified analytical platform combines SAS Viya with Posit and a common shared storage layer so programmers and data scientists can work across SAS, R, Python, and future tools without duplicating data or weakening governance. The idea is simple but powerful: one governed data foundation, multiple best-fit tools and a consistent user experience people are willing to use all day.</p>
<p>For Regeneron, AI should not sit off to the side as another disconnected tool. It should work naturally across SAS Viya, Posit and future tools, using secure common protocols so users can ask questions, get answers and receive recommendations without leaving the governed ecosystem.</p>
<p>That strategy-first approach shaped the migration itself. Before moving workloads at scale, Regeneron invested in:</p>
<ul>
<li>Stakeholder alignment across IT, business, and statistical programming leadership.</li>
<li>Rigorous planning, including detailed Gantt charts, risk and pitfall analysis, and mitigation strategies.</li>
<li>Validation strategy and change management before workloads moved at scale.</li>
<li>Early user engagement with business SMEs.</li>
<li>A “test small, scale big” approach using sample workloads in development before production.</li>
<li>Close coordination across IT, business, storage, CloudOps, SAS, implementation partners and other technology providers.</li>
</ul>
<p>The technical work was substantial. The migration required  changes dataset encoding issues, PROC IML image-generation workflows, Enterprise Guide-to-SAS Studio change management, log-line limits, POSIX permission challenges and validation requirements across AWS, storage, SAS Viya, R packages, and third-party components. In a GxP-compliant environment, every component that data touches must be considered, validated, and governed.</p>
<p>By the numbers, Regeneron had migrated hundreds of users and expected to reach 400 by the end of the journey, with millions of files and roughly 90 terabytes of legacy data in scope. The roadmap began with strategic planning in 2024, moved through non-GxP and GxP platform go-lives in 2025, launched pilot and wave-based migrations in 2026, and is expected to culminate in a modern, multilingual, modular, AI-enabled, cloud-native, and GxP-compliant statistical computing environment heading into 2027.</p>
<p>Regeneron’s migration mantra is equally clear: strategy drives execution. Or put another way, design with intention, execute with discipline and scale with confidence.</p>
<h2>What these stories teach us</h2>
<p>Posten Bring and Regeneron approached modernization from different starting points. One story centers on resilience, adaptation and bringing a long-standing organization forward. The other centers on strategic platform design, governance, and future readiness in a highly regulated environment.</p>
<p>Together, they point to the same conclusion in that migration is not the finish line. It is the mechanism organizations use to become more adaptive, more governed, more scalable, and ready for what comes next. That requires more than moving code and data. It requires clear ownership, engaged users, executive commitment, disciplined planning, trusted partners, and the willingness to rethink how work gets done.</p>
<p>The organizations that get the most from modernization are not simply asking, “How do we move what we have?” They are asking, “What do we want to become?”</p>
<p>That is why the best migrations don’t just move workloads. They move organizations forward.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/">From SAS 9 to SAS Viya: Modernize analytics without starting over</a></li>
<li><a href="https://www.youtube.com/watch?v=DeIHhQg_s8M">Streamline Your Migration to SAS Viya 4 With Time-Saving Automation</a></li>
<li><a href="https://www.youtube.com/watch?v=hvstl-wLPww">Modernizing to SAS Viya – Tips, Tricks and Lessons Learned</a></li>
<li><a href="https://www.youtube.com/watch?v=u8SUsUGr6Hg">SAS9 to SAS Viya: How to Streamline Your Migration</a></li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/08/07/modernization-lessons-from-posten-bring-and-regeneron/">Modernization lessons from Posten Bring and Regeneron</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/08/07/modernization-lessons-from-posten-bring-and-regeneron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/08/PostenModernize-150x150.jpg" />
	</item>
		<item>
		<title>Remembering Lex Jansen: Friend to SAS learners everywhere</title>
		<link>https://blogs.sas.com/content/sgf/2026/07/31/remembering-lex-jansen/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/07/31/remembering-lex-jansen/#comments</comments>
		
		<dc:creator><![CDATA[Chris Hemedinger]]></dc:creator>
		<pubDate>Fri, 31 Jul 2026 14:45:09 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[PharmaSUG]]></category>
		<category><![CDATA[sas communities]]></category>
		<category><![CDATA[sas users]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55461</guid>

					<description><![CDATA[<p>For many SAS users, lexjansen.com was simply a destination. It was the place you went when you needed to find that paper you vaguely remembered from a conference years ago, track down an expert's presentation on a niche topic, or discover the best work that had ever been published on [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/31/remembering-lex-jansen/">Remembering Lex Jansen: Friend to SAS learners everywhere</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>For many SAS users, lexjansen.com was simply a destination. It was the place you went when you needed to find that paper you vaguely remembered from a conference years ago, track down an expert's presentation on a niche topic, or discover the best work that had ever been published on a particular SAS technique. It was fast, comprehensive, and effective.</p>
<p>What many people didn't realize was that Lex Jansen was a <strong>real</strong> person. </p>
<p>We learned the sad news this week that Lex passed away. And his site, which has helped thousands of SAS users over the decades, is now gone. These are two huge losses for the global community of SAS users.</p>
<h2>His passion project: make information accessible</h2>
<p>Lex built and maintained lexjansen.com, a personal, not-for-profit project that became one of the most valuable resources in the SAS ecosystem. The site indexes tens of thousands of papers from SAS Global Forum, PharmaSUG, PHUSE, regional user groups, and countless other conferences, providing a powerful search experience across decades of technical knowledge.</p>
<p>That's perhaps one of the highest compliments a technical contributor can receive. Lex built something so useful, so dependable, and so enduring that it became infrastructure. His work quietly enabled the success of thousands of others.</p>
<p>Before modern search engines became as capable as they are today, lexjansen.com set the standard for finding relevant technical content. Even now, many experienced SAS professionals will instinctively type their search terms into Lex's site before trying anything else. The site's carefully curated indexing and search capabilities often made it easier to find the right paper than searching the conference websites themselves.</p>
<p>For countless users, "Lex Jansen" became synonymous with the site itself. Many learned how to use lexjansen.com long before they ever learned there was a person behind it. Some never knew at all.</p>
<h2>Stalwart contributor to clinical data standards and the pharma industry</h2>
<p>Throughout his career, Lex had many "day jobs" aside from building his website for SAS users. He worked on methods and data formats for clinical data and pharmaceutical submission standards, including CDISC and Define-XML. After years of prior experience in the industry, Lex joined SAS and worked on offerings such as SAS Clinical Standards Toolkit and SAS Life Science Analytics Framework. He later retired from SAS, but went to work for CDISC where he continued his work toward improving the data standards process and helping others in the industry to learn. (<a href="https://www.linkedin.com/pulse/memory-our-friend-colleague-lex-jansen-cdisc-ijadc/">See this remembrance from his CDISC colleagues.</a>) All the while, he continued to add content and index rules to lexjansen.com, so SAS users could always find the latest and best published information.</p>
<h2>A personal remembrance</h2>
<p>Like many people, I knew lexjansen the site long before I met Lex Jansen the person. I got to know him just a little bit during his time at SAS and during the annual PharmaSUG conference, where we could meet up in person. Since my team at SAS curates the content from SAS conferences, I worked with Lex to get that content indexed for his site. Most recently he added the content for SAS Innovate 2026. He was a super nice and approachable colleague and friend, and always very responsive to every request.</p>
<p>On a personal level, we recently compared photos from our respective trips to Iceland. Lex traveled there in June 2026, whereas I had been there in March. We both found it to be a beautiful country with amazing history and culture, but our climate experiences were very different! My trip was during Winter; Lex was there in the Spring. </p>
<figure id="attachment_55467" aria-describedby="caption-attachment-55467" style="width: 1000px" class="wp-caption alignnone"><a href="https://blogs.sas.com/content/sgf/files/2026/07/lex-jansen-iceland.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/07/lex-jansen-iceland.png" alt="Iceland photos" width="1000" height="339" class="size-full wp-image-55467" srcset="https://blogs.sas.com/content/sgf/files/2026/07/lex-jansen-iceland.png 1000w, https://blogs.sas.com/content/sgf/files/2026/07/lex-jansen-iceland-300x102.png 300w, https://blogs.sas.com/content/sgf/files/2026/07/lex-jansen-iceland-768x260.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-55467" class="wp-caption-text">An iconic waterfall in Iceland over a 3-month span</figcaption></figure>
<h2>Living in a world without lexjansen.com</h2>
<p>The loss of Lex's site is a setback for SAS users -- but we still have access to the decades of content that the site made easy to search and find.</p>
<p>The goal of lexjansen.com was to index all of this published SAS content to make it easily searchable.  But most of the actual published papers are hosted elsewhere. For example, you can <a href="https://communities.sas.com/t5/SAS-Communities-Library/SUGI-SAS-Global-Forum-SAS-Innovate-Past-Conference-Proceedings/ta-p/863480">find links to all SUGI/SAS Global Forum/SAS Innovate sessions here</a>.</p>
<p>PharmaSUG proceedings are at the PharmaSUG site: <a href="https://pharmasug.org/past-conference-proceedings/">https://pharmasug.org/past-conference-proceedings/</a></p>
<p>Many of the other regional/large conferences are also self-hosting their papers. Over time, I know the community will come together to fill the gap left by Lex, inspired by Lex's work and his acts of service for us all. </p>
<p><strong>Update:</strong> this work has already begun. Check out these sites (added from the comments):</p>
<ul>
<li><a href="https://www.clinyun.com/ppi/">https://www.clinyun.com/ppi/</a>
</li>
<li><a href="https://www.clinstandards.org/conference-papers">https://www.clinstandards.org/conference-papers</a>
</li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/31/remembering-lex-jansen/">Remembering Lex Jansen: Friend to SAS learners everywhere</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/07/31/remembering-lex-jansen/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/07/lex-site-150x150.png" />
	</item>
		<item>
		<title>Registering the whole pipeline, not just the model</title>
		<link>https://blogs.sas.com/content/sgf/2026/07/30/registering-the-whole-pipeline-not-just-the-model/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/07/30/registering-the-whole-pipeline-not-just-the-model/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Wileman]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 17:26:07 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Decisioning]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[model deployment]]></category>
		<category><![CDATA[Model Governance]]></category>
		<category><![CDATA[Model Registration]]></category>
		<category><![CDATA[SAS Code]]></category>
		<category><![CDATA[sas model manager]]></category>
		<category><![CDATA[SAS Model Studio]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55434</guid>

					<description><![CDATA[<p>Most machine learning models produce a probability, but many times logic is applied to that prediction to produce a decision. That last logic step often lives in a downstream script disconnected from the model it depends on, easy to lose when the model is refreshed. Using the home equity (HMEQ) dataset, this post walks through a practical alternative in SAS Model Studio. A SAS Code node placed after the modeling node weights the predicted default probability by the requested loan amount to produce expected loss in dollars, and the new Model Registration node (2026.05) accumulates that logic into a single model registered in SAS Model Manager. The result is a model and its decision logic captured as one governed, versioned artifact, so whoever scores the model gets the decision-ready output computed the same way every time.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/30/registering-the-whole-pipeline-not-just-the-model/">Registering the whole pipeline, not just the model</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A trained model rarely produces the exact number the business acts on. Often there is a last step between the model's output and the decision it drives: a threshold, a calibration, a business weight. That logic tends to live in a downstream script or a spreadsheet, disconnected from the model it depends on. When the model is refreshed or republished, the adjustment is easy to lose, and the score that reaches production no longer matches the score the team validated.</p>
<p>The Model Registration node in SAS Model Studio (2026.05) gives that logic a home. Because the node accumulates score code from every preceding node in the pipeline, any post-model adjustment you build with a SAS Code node travels with the model into SAS Model Manager. You register one artifact that already knows how to produce the business-ready output.</p>
<h2><strong>A use case: weighting predictions for decisioning</strong></h2>
<p>We will use HMEQ, the home equity loan dataset many SAS users already know. The target BAD flags whether an applicant defaulted. The model returns a probability of default for each application. The credit team, though, does not act on probability. They act on dollars at risk. A 40% default probability on a large, requested loan is a bigger exposure than a 70% probability on a small one.</p>
<p>The fix is a single derived score: expected loss, calculated as the default probability multiplied by the requested loan amount. It is a trivial expression. The hard part has always been keeping it attached to the model. Build it in a SAS Code node placed after the modeling node, and the Model Registration node carries it through to Model Manager as part of the published score code.</p>
<h2><strong>Step by step in Model Studio</strong></h2>
<ol>
<li><strong>Build the baseline pipeline.</strong> Start from the Data node with the HMEQ data and BAD assigned as the target (event level 1). Add any preprocessing you’d like, then add a Supervised Learning node such as Gradient Boosting. Run it. Note the posterior probability variable the node generates, P_BAD1.</li>
<li><strong>Add a SAS Code node after the modeling node.</strong> Connect the Supervised Learning node to the SAS Code node so that its parent already generates score code. This placement is what lets the SAS Code node contribute to the accumulated score code downstream.</li>
<li><strong>Author the weighting logic as score code.</strong> In the SAS Code node editor, add the expression that creates your derived output variable:</li>
</ol>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #006400; font-style: italic;">/* Expected loss: weight the default probability by the requested
loan amount so reviewers can rank applications by dollars at
risk, not probability alone. */</span>
<span style="color: #0000ff;">length</span> EL_dollars <span style="color: #2e8b57; font-weight: bold;">8</span>;
EL_dollars = P_BAD1 <span style="color: #006400; font-style: italic;">* LOAN;</span></pre></td></tr></table></div>

<p>‘LOAN’ is already an input in HMEQ, so it is carried through the pipeline and available when the published model runs. If you derive the weight from a variable that is not a model input, make sure it is retained so scoring can reach it.</p>
<ol start="4">
<li><strong>Run the SAS Code node.</strong> Confirm ‘EL_dollars’ appears in the output and the values look right against a few known records.
<p><a href="https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node.png" alt="" width="1600" height="1192" class="aligncenter size-full wp-image-55443" srcset="https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node.png 1600w, https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node-300x224.png 300w, https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node-1024x763.png 1024w, https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node-768x572.png 768w, https://blogs.sas.com/content/sgf/files/2026/07/Run-the-SAS-Code-node-1536x1144.png 1536w" sizes="(max-width: 1600px) 100vw, 1600px" /></a>
</li>
<li><strong>Add a Model Registration node after the SAS Code node.</strong> Run it. The node accumulates score code from both the Supervised Learning node and the SAS Code node, along with the artifacts required to register the model.
<p><a href="https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node.png" alt="" width="1680" height="1268" class="aligncenter size-full wp-image-55446" srcset="https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node.png 1680w, https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node-300x226.png 300w, https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node-1024x773.png 1024w, https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node-768x580.png 768w, https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node-1536x1159.png 1536w" sizes="(max-width: 1680px) 100vw, 1680px" /></a></p>
</li>
<li><strong>Register or publish from the node menu.</strong> The Model Registration node does not register automatically. Once it has run successfully, use the node menu options to register the model to SAS Model Manager, and publish to a destination if you are ready.</li>
<li><strong>Verify in Model Manager.</strong> Open the registered model and confirm the score code includes the ‘EL_dollars’ calculation. The weighting logic is now part of the governed model, not a separate step someone has to remember to rerun.</li>
</ol>
<h2><strong>What you have built</strong></h2>
<p>In a few steps, we took a standard supervised pipeline and made it carry its own decision logic. The Supervised Learning node produces the default probability; the SAS Code node turns that probability into expected loss in dollars, and the Model Registration node packages both into a single model registered in SAS Model Manager.</p>
<p>The advantage is that the business logic and the model are now one governed artifact. The expected-loss calculation is no longer a separate script that someone must remember to run, reconcile, or update when the model is refreshed. Whoever scores the model gets dollars at risk directly, computed the same way every time. The logic is versioned with the model, visible in Model Manager, and travels wherever the model is published. You register once, and the decision-ready output comes with it.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://blogs.sas.com/content/sascom/2026/01/26/conversational-pipeline-building-with-sas-viya-copilot-in-model-studio/">Conversational pipeline building with SAS Viya Copilot in Model Studio</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2025/02/28/sas-viya-workbench-sas-model-manager-sas-models/">SAS Viya Workbench & SAS Model Manager for Model Training and Deployment: SAS Models</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/04/15/building-an-ai-voice-agent/">From fraud detection to fraud resolution: Building an AI voice agent with SAS Viya and LLMs</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/01/16/unlocking-agentic-ai-potential-with-mcp-tools-in-sas-retrieval-agent-manager/">Unlocking agentic AI potential with MCP tools in SAS Retrieval Agent Manager</a></li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/30/registering-the-whole-pipeline-not-just-the-model/">Registering the whole pipeline, not just the model</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/07/30/registering-the-whole-pipeline-not-just-the-model/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/07/Add-a-Model-Registration-node-after-the-SAS-Code-node-150x150.png" />
	</item>
		<item>
		<title>The three components you need to use agentic AI with SAS</title>
		<link>https://blogs.sas.com/content/sgf/2026/07/23/the-three-components-you-need-to-use-agentic-ai-with-sas/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/07/23/the-three-components-you-need-to-use-agentic-ai-with-sas/#comments</comments>
		
		<dc:creator><![CDATA[Susan Kahler]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 18:25:16 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Agentic AI]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Prompt Engineering]]></category>
		<category><![CDATA[SAS 9]]></category>
		<category><![CDATA[sas programming]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[SASPy]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55398</guid>

					<description><![CDATA[<p>Learn how SAS 9 programmers can use agentic AI tools such as Claude Code and ChatGPT Codex with SASPy to automate code generation, execution, testing, and debugging while maintaining human oversight, validation, and ownership of results.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/23/the-three-components-you-need-to-use-agentic-ai-with-sas/">The three components you need to use agentic AI with SAS</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>A practical guide to using Agentic AI in a SAS 9 programming workflow</h2>
<p>Most SAS 9 programmers are used to writing the code, running it, checking the log, fixing what broke, and running it again. Agentic AI can take on parts of that loop, but only if it can do more than answer a question. It needs to write or revise code, run it, inspect the results, and keep working until the output meets the goal.</p>
<p>For SAS 9 programmers, the setup is not as simple as picking an AI model and turning it loose. SAS 9.4 is not built for agentic AI in the same way newer SAS Viya environments are, so you need a bridge between the AI tool and the SAS 9 environment. A useful way to think about it is in three parts: the interface, the agentic AI tool, and the connection back to SAS 9.</p>
<h2>1. The interface: Where the work happens</h2>
<p>The interface is where you give the AI its instructions, watch what it is doing, and step in when needed. You can use a command line, an IDE such as Visual Studio Code, or a chat-like interface. For SAS 9 programmers, the IDE option is usually the most practical because you can see the generated SAS code, files, logs, and agent conversation in one place.</p>
<p>That visibility matters. If the agent is writing DATA steps, PROC REPORT code, PROC SQL, or ODS output, you still need to review the logic, check the log, verify the results, and make sure the output fits the business need.</p>
<h2>2. The agentic AI solution: The system that plans, codes, and iterates</h2>
<p>The second piece is the agentic AI tool itself. That might be <a href="https://claude.com/product/claude-code">Claude Code</a>, <a href="https://chatgpt.com/codex/?utm_source=microsoft&amp;utm_medium=paid_search&amp;utm_campaign=MSFT_X_SEM_BBR_Codex_CDX_BAU_ACQ_PER_MIX_ALL_NAMER_US_EN_020626&amp;c_id=570885002&amp;c_agid=1181977221662569&amp;c_crid=&amp;c_kwid=kwd-73874146618147:loc-190&amp;c_ims=&amp;c_pms=83070&amp;c_nw=o&amp;c_dvc=c">ChatGPT Codex</a>, or another tool. The important point is that the AI can break down a task, use tools, run SAS code, look at the results, fix errors, and try again.</p>
<p>That changes what the SAS 9 programmer does. You are not writing every line by hand. You are explaining the task, giving the agent the data and environment details it needs, and then reviewing what comes back. It is still programming, just one level higher.</p>
<p>That is why SAS knowledge still matters. The AI can help with syntax, boilerplate code, report generation, data exploration, and first-pass debugging. But you still need to know whether the output makes sense, which SAS procedures are appropriate, and where the agent may be taking a shortcut.</p>
<h2>3. The SAS connection: The bridge between AI reasoning and SAS execution</h2>
<p>The third piece is the connection to SAS 9. This is what turns the workflow from code suggestion into something useful. Without the connection, the agent can write SAS code but cannot test it. With the connection, it can submit the code, read the log, inspect the output, correct mistakes, and keep going.</p>
<p>For SAS 9.4, <a href="https://support.sas.com/en/software/saspy.html">SASPy</a> is that practical bridge. It lets Python connect to SAS, submit SAS programs, and bring data or ODS results back into Python. That matters because many agentic AI tools are comfortable working in Python, while the SAS program stills runs natively in SAS 9.</p>
<p>This is where SAS 9 differs from Viya. SAS Viya has tools such as <a href="https://www.sas.com/en_us/software/viya/mcp-server.html">SAS Viya MCP</a> that are built for agentic AI. SAS 9.4 needs a more hands-on setup. For many SAS 9 programmers, that means using SASPy with a connection method such as SSH, IOM, or COM so the AI can submit code to the SAS server and bring results back for review.</p>
<p><strong>Want to see it work?</strong> Watch the SAS Innovate 2026 demo from <a href="https://www.linkedin.com/in/joe-matise-772b6113/">Joe Matise, NORC</a> to see Claude Code use SASPy to run SAS 9 code, review results, and fix errors.</p>
<p><center><br />
<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/J9bLSnQifFs?si=KMsqQfG21MnMjaj6" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe><br />
</center></p>
<p><strong>Want to get the files?</strong> Visit Joe’s <a href="https://github.com/matise-joe-norc/connect-saspy">GitHib repo</a>.</p>
<h2>Prompt engineering is the operating discipline</h2>
<p>Prompt engineering is a new part of the programmer’s job in this workflow and includes the agent settings, reusable pre-prompt, and the actual prompt. The settings affect what the agentic AI is able to do. The actual prompt is where you tell the agent what to do, where to put files, which data set to use, what the output should look like, and to run and validate the result for a given project. The reusable pre-prompt is more like onboarding a new employee. It gives the agent the guidance you would give a new SAS programmer: environment details, file path rules, SASPy or Connect SASPy instructions, preferred coding patterns, and reminders to check the log.</p>
<h2>Verification, validation, and data handling still matter</h2>
<p>Agentic AI can speed up SAS 9 coding, but it does not remove the need for judgment. You still need to review the generated code, inspect the SAS log, confirm that the output was created correctly, and decide whether the results are ready to share.</p>
<p>Data handling deserves the same care. If the work involves sensitive data, know what the AI can see and what your policies allow. One practical pattern is to let the agent work with test or de-identified data, then have a human move the reviewed code into the production environment.</p>
<h2>Bottom line</h2>
<p>Using Agentic AI with SAS 9 is not just about the AI model. The goal is to set up a workflow where the agent can help, but the SAS programmer still understands, reviews, and owns the result. The three pieces are straightforward: a good interface, an agentic AI tool, and a reliable connection to SAS 9.</p>
<p>When the setup works, Agentic AI can help SAS 9 programmers get to a solid first program faster. It can explore data, generate code, and catch errors, but the programmer still owns the result. The value comes from pairing the AI’s speed with the programmer’s review, validation, and domain expertise.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://www.youtube.com/watch?v=2zv3g1uszWE">SAS 9.4 M10: Continuing Support and Roadmap in the Era of Viya</a></li>
<li><a href="https://www.sas.com/en_us/webinars/ate-empower-your-ai-agents.html">Ask the Expert webinar: “Empower Your AI Agents With Analytics and Decisioning Expertise With SAS MCP Server”</a></li>
<li><a href="https://communities.sas.com/t5/SAS-Communities-Library/Introducing-the-SAS-Agentic-AI-Accelerator-Build-AI-Agents/ta-p/977176">Introducing the SAS Agentic AI Accelerator: Build AI Agents Seamlessly in SAS Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/01/16/unlocking-agentic-ai-potential-with-mcp-tools-in-sas-retrieval-agent-manager/">Unlocking Agentic AI Potential with MCP Tools in SAS Retrieval Agent Manager</a></li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/23/the-three-components-you-need-to-use-agentic-ai-with-sas/">The three components you need to use agentic AI with SAS</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/07/23/the-three-components-you-need-to-use-agentic-ai-with-sas/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/07/claudetheprogrammer-150x150.jpg" />
	</item>
		<item>
		<title>From SAS 9 to SAS Viya: Modernize analytics without starting over</title>
		<link>https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/#respond</comments>
		
		<dc:creator><![CDATA[Susan Kahler]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 18:20:02 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Modernization]]></category>
		<category><![CDATA[SAS 9]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55367</guid>

					<description><![CDATA[<p>Learn how SAS 9 customers can modernize to SAS Viya incrementally, leveraging AI assistance, agentic AI, open-source collaboration, and scalable cloud deployment while preserving existing SAS investments and governance.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/">From SAS 9 to SAS Viya: Modernize analytics without starting over</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>For many organizations, SAS 9 is more than just an analytics platform. It is an integral part of how critical decisions get made every day, from banks managing credit risk and detecting fraud, to insurers analyzing claims and pricing, to health care organizations identifying fraud, waste and abuse, to government agencies improving public programs, and manufacturers using data to improve operations and safety.</p>
<p>SAS 9 is trusted because teams rely on its consistency, accuracy and governance for decisions that matter. It is familiar because users know how to work with it  and deeply embedded in the workflows, reports and processes that turn data into insight.</p>
<p>SAS Viya is the next generation of the SAS platform. It helps organizations evolve beyond SAS 9 by modernizing the data and AI life cycle, from data management and analytics to AI development, deployment and operational decisioning. Teams can work faster, collaborate more easily and move analytics into production with less friction. They also have the flexibility to deploy across cloud, hybrid and on-premises environments while keeping the governance and analytical rigor they value from SAS.</p>
<p>The question for many SAS 9 customers is not whether to modernize, but where to begin and how to do it in a way that builds on the SAS programs, data pipelines, reports and user expertise already in place.</p>
<h2>Modernize with purpose</h2>
<p>Modernizing SAS Viya does not have to be an all-or-nothing decision. It can begin with a specific business need, such as accelerating an AI use case, scaling a high-value analytics workflow, or helping SAS, Python and R users collaborate more easily in one governed environment.</p>
<p>Four areas show where Viya can make that difference: AI assistance that helps people work faster, agentic AI that connects insight to action, open collaboration across SAS, Python and R, and scalability for meeting data and AI demands.</p>
<h2>1. Work with AI assistance across the data and AI life cycle</h2>
<p>SAS Viya Copilot helps make analytics more approachable and productive by bringing natural language assistance into the way people already work. Users can ask questions, get guidance in context and move from data to insight without relying on every step being manual or highly specialized. For example, Copilot can help users code, explore data, generate explanations, identify next steps and complete common tasks more efficiently.</p>
<figure id="attachment_55376" aria-describedby="caption-attachment-55376" style="width: 1642px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development.png" alt="" width="1642" height="924" class="size-full wp-image-55376" srcset="https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development.png 1642w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development-300x169.png 300w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development-1024x576.png 1024w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development-768x432.png 768w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development-1536x864.png 1536w" sizes="(max-width: 1642px) 100vw, 1642px" /></a><figcaption id="caption-attachment-55376" class="wp-caption-text">Figure 1. SAS Viya Copilot supports model pipeline development</figcaption></figure>
<p>That matters for teams trying to do more with limited time and resources. In Viya, Copilot is connected to the data and AI life cycle, so users can work faster, build confidence, and stay within a governed SAS environment instead of moving work into disconnected tools.</p>
<h2>2. Move from insight to governed action with agentic AI</h2>
<p>AI is evolving from systems that generate answers to systems that can help analyze, decide and act within business workflows. In SAS Viya, agentic AI can connect data, analytics, decisioning and governance so AI-supported actions are transparent, controlled and aligned with business rules.</p>
<p>That can help teams move beyond recommendations to action, such as prioritizing a fraud alert, triggering a next-best offer, routing a service issue or applying a policy decision, while keeping humans in the loop where judgment and accountability matter. For organizations, the value is not simply automation. It is trusted automation, with oversight where it matters.</p>
<h2>3. Bring SAS, Python and R teams together</h2>
<p>Modern analytics teams rarely use one language or tool. SAS, Python and R users often need to work on the same problems, such as preparing data, testing models, comparing methods or sharing results, even when they start from different tools and workflows.</p>
<p>SAS Viya brings those ways of working together in one governed environment. Teams can use familiar tools, reuse existing SAS assets, collaborate on common data and models, and move work from experimentation to production with more consistency, control and scale.</p>
<figure id="attachment_55379" aria-describedby="caption-attachment-55379" style="width: 1766px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment.png" alt="" width="1766" height="992" class="size-full wp-image-55379" srcset="https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment.png 1766w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment-300x169.png 300w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment-1024x575.png 1024w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment-768x431.png 768w, https://blogs.sas.com/content/sgf/files/2026/07/Figure-2.-SAS-Viya-Workbench-supports-SAS-Python-and-R-development-in-a-governed-environment-1536x863.png 1536w" sizes="(max-width: 1766px) 100vw, 1766px" /></a><figcaption id="caption-attachment-55379" class="wp-caption-text">Figure 2. SAS Viya Workbench supports SAS, Python and R development in a governed environment.</figcaption></figure>
<h2>4. Scale confidently as data and AI demands grow</h2>
<p>Analytics workloads rarely stay the same. Data volumes are growing; more users need access to insight and AI projects can require significant compute. SAS Viya gives organizations the flexibility to scale analytics as demand changes, instead of being limited by environments that were not designed for today’s data and AI workloads.</p>
<p>With Viya, teams can support more users, run more workloads and choose deployment options that fit their environment, including cloud, hybrid and on-premises. For example, organizations can expand capacity for model training, support seasonal demand spikes and give more teams access to shared analytics resources.</p>
<p>SAS Managed Cloud Services can also help reduce the operational burden of managing the platform, giving teams another way to modernize while focusing more on analytics outcomes than infrastructure management.</p>
<h2>What this means for SAS 9 customers</h2>
<p>Together, these areas point to a bigger shift. Instead of treating analytics as a set of separate tasks, organizations can manage data, AI and decisions as a connected, governed life cycle. AI assistance, agentic AI, open collaboration and cloud scale support each shift by helping teams work faster, move from insight to action, collaborate more easily and create room for future growth and innovation. The opportunity is to make modernization focused, achievable and tied to business value. Start with the work that matters most, then build from there.</p>
<h2>Ready to explore your Viya path?</h2>
<p>If your team is already delivering value with SAS 9, Viya can help you build on that foundation. Start with the opportunity that matters most, whether that is faster AI development, smoother collaboration, easier deployment or greater scale. <a href="https://www.sas.com/en_us/software/viya/moving-to-viya.html">Connect with us</a> to start the conversation.</p>
<h2>Additional resources</h2>
<p>To go deeper, explore these resources:</p>
<ul>
<li><a href="https://www.sas.com/en_us/software/viya/copilot.html">SAS Viya Copilot</a>: Learn how natural language assistance can help users work faster across the data and AI life cycle.</li>
<li><a href="https://www.sas.com/en_us/solutions/ai/agentic-ai.html">Agentic AI</a>: Explore how AI agents can support governed decisions and actions.</li>
<li><a href="https://www.sas.com/en_us/software/viya/open.html">SAS open-source integration</a>: See how SAS, Python and R users can work together in one governed environment.</li>
<li><a href="https://www.sas.com/en_us/23289/2323/workbench.html">SAS Viya Workbench</a>: On-demand computing power and self-service flexibility for fast SAS, Python or R coding.</li>
<li><a href="https://www.sas.com/sas/webinars/move-to-sas-viya.html">Move to SAS Viya webinar series</a>: On-demand sessions showing clear migration pathways, product walk-throughs and demos from SAS Enterprise Guide® and SAS Analytics Pro transitions to data integration, visual analytics and modeling.</li>
<li><a href="https://www.sas.com/en_us/solutions/cloud/sas-managed-cloud-services.html">SAS Managed Cloud Services</a>: Learn how managed services can reduce operational complexity.</li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/">From SAS 9 to SAS Viya: Modernize analytics without starting over</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/07/16/from-sas-9-to-sas-viya-modernize-analytics-without-starting-over/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/07/Figure-1.-SAS-Viya-Copilot-supports-model-pipeline-development-150x150.png" />
	</item>
		<item>
		<title>How SAS Viya Copilot works inside the task, not alongside it</title>
		<link>https://blogs.sas.com/content/sgf/2026/05/28/sas-viya-copilot-ai-inside-task/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/05/28/sas-viya-copilot-ai-inside-task/#comments</comments>
		
		<dc:creator><![CDATA[Sasha Karpinski]]></dc:creator>
		<pubDate>Thu, 28 May 2026 21:00:50 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[augmented analytics]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAS Visual Analytics]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[SAS Viya Copilot]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55309</guid>

					<description><![CDATA[<p>The best AI assistance meets you where you are. A chat window opens. A question surfaces. An answer comes back before momentum fades. That conversational experience is powerful precisely because it keeps insight close to the work. But there's a version of assistance that goes even further – one that [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/05/28/sas-viya-copilot-ai-inside-task/">How SAS Viya Copilot works inside the task, not alongside it</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><strong>The best AI assistance meets you where you are.</strong></h3>
<p>A chat window opens. A question surfaces. An answer comes back before momentum fades. That conversational experience is powerful precisely because it keeps insight close to the work. But there's a version of assistance that goes even further – one that doesn't wait to be asked.</p>
<p><a href="https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/">In the third blog post in this series, we explored how SAS® Viya® Copilot introduces a conversational AI assistant into SAS® Visual Analytics to help users explore data, create reports, and surface insights through natural language.</a> The chat experience is powerful precisely because it keeps users inside the analytical environment while questions surface and evolve.</p>
<p>But conversation and embedded assistance are two different things.</p>
<p>If the chat interface puts SAS Viya Copilot alongside your work, the capabilities we’re exploring now put it inside the work itself. No chat pane. No context switch. Assistance that surfaces at the moment a task begins and stays out of the way the rest of the time.</p>
<a href="https://blogs.sas.com/content/tag/augmented-analytics/" class="sc-button sc-button-default sc-button-large" target="_blank"><span>View every blog in this series about SAS Viya Copilot</span></a>
<h2><strong>The hidden costs of routine tasks</strong></h2>
<p>In the second blog post in this series, we identified the execution gap: the space between having analytical capability and actually sustaining the momentum to act on it. A large share of that gap isn’t caused by complex problems. It’s caused by repetitive ones:</p>
<ul>
<li>Preparing data for effective insights.</li>
<li>Interpreting what a visualization is showing.</li>
<li>Translating reports for global audiences.</li>
</ul>
<p>These tasks often require manual effort, domain knowledge, or additional context switching that slows users down. Viya Copilot’s in-context capabilities are designed to address exactly this. Not by removing users from the workflow, but by surfacing GenAI assistance directly within the interface where the work is already happening.</p>
<h2><strong>Grouping without the grind</strong></h2>
<p>Creating custom categories is a common part of preparing data for analysis. Users often need to organize raw values into higher-level, more meaningful groupings:</p>
<ul>
<li>Cities into geographic regions.</li>
<li>Products into brands or product families.</li>
<li>Departments into business units.</li>
</ul>
<p>Traditionally, this process requires users to manually create groups and assign values one by one – a task that can become time-consuming when working with large or unfamiliar datasets.</p>
<p>With SAS Viya Copilot, users can generate these value groups automatically using generative AI directly within the custom category workflow.</p>
<p>For example, a user working with a list of cities can ask Copilot to generate geographic regions. Similarly, product names can be grouped into likely brands or categories without requiring manual assignment of every individual value.</p>
<p>The workflow also supports iterative refinement. Users can provide additional context to the value group generation, which can be either instructional ("Create 4 groups") or clarifying ("STATE refers to the current status"), and then regenerate the groupings.</p>
<p>For added transparency, users can view an explanation of what external data Copilot used to generate the value groups.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-55360 size-full" src="https://blogs.sas.com/content/sgf/files/2026/05/image-4.png" alt="" width="1913" height="1079" srcset="https://blogs.sas.com/content/sgf/files/2026/05/image-4.png 1913w, https://blogs.sas.com/content/sgf/files/2026/05/image-4-300x169.png 300w, https://blogs.sas.com/content/sgf/files/2026/05/image-4-1024x578.png 1024w, https://blogs.sas.com/content/sgf/files/2026/05/image-4-768x433.png 768w, https://blogs.sas.com/content/sgf/files/2026/05/image-4-1536x866.png 1536w" sizes="(max-width: 1913px) 100vw, 1913px" /></p>
<h2><strong>Summaries that explain the story behind the visual</strong></h2>
<p>Charts and visualizations communicate information quickly – but interpreting what really matters within a graph can still take time.</p>
<p>With SAS Viya Copilot, users can generate on-the-fly natural language summaries that are grounded in the data. Copilot analyzes the visual and generates a concise narrative summary that highlights important analytical insights and patterns, including trends, correlations, seasonality and potential outliers.</p>
<p>These summaries can help users interpret findings more quickly – especially when exploring unfamiliar data, reviewing complex dashboards, or preparing executive summaries based on detailed reports.</p>
<p>For example:</p>
<ul>
<li>A time series visualization might highlight seasonal trends or unexpected spikes.</li>
<li>A scatter plot summary could identify strong correlations or notable outliers.</li>
<li>A bar chart summary may call attention to top-performing categories or unusually large gaps between groups.</li>
</ul>
<p>This capability is particularly valuable because it aims to reduce the time-to-insight between seeing a chart and understanding its meaning.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55357" src="https://blogs.sas.com/content/sgf/files/2026/05/Blog4_GraphSummaryV2.gif" alt="" width="1280" height="720" /></p>
<h2><strong>Localizing reports for global audiences</strong></h2>
<p>In an increasingly global workforce, organizations often need to distribute reports across teams, regions, and countries where users speak different languages. Translating report content manually is often time-consuming – especially when dashboards include many pages, prompts, labels, and visual elements.</p>
<p>SAS Viya Copilot helps streamline this process by embedding AI-assisted report localization directly in SAS Visual Analytics. After a target language is chosen, Copilot generates translated labels for report elements, including page names, chart titles, and other report text content.</p>
<p>Users can then review the generated translations for appropriateness or export the translated text for additional review or collaboration.</p>
<p>Users can also refine the results by specifying additional information or instructions to help guide the generated values. This additional guidance capability is especially useful when working with industry-specific terminology, brand language, or regional phrasing preferences.</p>
<p>SAS Visual Analytics also maintains transparency throughout the experience. Translations generated by AI are clearly marked, allowing users to distinguish AI-generated content from manually created content.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55348" src="https://blogs.sas.com/content/sgf/files/2026/05/Blog4-Localization.gif" alt="" width="1920" height="1080" /></p>
<h2><strong>AI that’s integrated into the analytics experience</strong></h2>
<p>One of the most important aspects of these embedded capabilities is that they do not feel separate from the application.</p>
<p>This matters because the most effective AI experiences are often the ones that reduce friction and context switching. SAS Viya Copilot enhances existing workflows with targeted assistance exactly where users need it, maximizing productivity.</p>
<p>In the next post in this series, we’ll explore how SAS Viya Copilot combines GenAI assistance with advanced models to help users uncover deeper insights and accelerate analytical decision-making.</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/SFaGBRSpP4g?si=9Jt47Ipx8sSpT_di" width="560" height="315?wmode=transparent" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3 data-start="791" data-end="889"><strong><a href="https://www.sas.com/en_us/software/viya/copilot.html">Learn more about how SAS Viya Copilot helps organizations turn analytical power into sustained decision momentum.</a></strong></h3>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/05/28/sas-viya-copilot-ai-inside-task/">How SAS Viya Copilot works inside the task, not alongside it</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/05/28/sas-viya-copilot-ai-inside-task/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/05/SA1106E7-150x150.jpg" />
	</item>
		<item>
		<title>From question to clarity: how SAS Viya Copilot changes the way we work with data</title>
		<link>https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/#comments</comments>
		
		<dc:creator><![CDATA[Sasha Karpinski]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 14:04:45 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[augmented analytics]]></category>
		<category><![CDATA[Copilot]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[SAS Visual Analytics]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[SAS Viya Copilot]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55258</guid>

					<description><![CDATA[<p>Most analytical journeys start the same way – with a question. When did we have the highest profit? Which customers are driving growth? What segment should we look at next? In traditional analytic workflows, turning those questions into answers often requires navigating menus, configuring visuals, writing calculations and interpreting results [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/">From question to clarity: how SAS Viya Copilot changes the way we work with data</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><strong>Most analytical journeys start the same way – with a question.</strong></h3>
<p>When did we have the highest profit?<br />
Which customers are driving growth?<br />
What segment should we look at next?</p>
<p>In traditional analytic workflows, turning those questions into answers often requires navigating menus, configuring visuals, writing calculations and interpreting results before a story emerges.</p>
<p><a href="https://blogs.sas.com/content/sascom/2026/02/19/where-insight-keeps-moving-augmented-analytics-inside-sas-visual-analytics/">In the last blog post in this series, we explored how SAS<sup>®</sup> Viya<sup>®</sup> Copilot changes the traditional analytical experience inside SAS<sup>®</sup> Visual Analytics</a>.</p>
<p>Embedded directly in SAS Visual Analytics, Copilot introduces a conversational AI assistant that helps users explore data, create reports, and interpret insights through natural language. By combining generative AI with the analytical capabilities of the SAS Viya platform, Copilot transforms business questions into analytical actions, recommendations, and explanations – creating a more fluid analytics experience.</p>
<p>Let's explore how Viya Copilot can help you move from question to clarity faster than ever.</p>
<h2><strong>Analytics that meet you where you are</strong></h2>
<p>Analytics doesn’t happen in a single step. It unfolds across stages:</p>
<ul>
<li>Exploring and shaping data.</li>
<li>Building visualizations and reports.</li>
<li>Interpreting insights.</li>
</ul>
<p>SAS Viya Copilot supports users throughout this journey – users simply need to ask.</p>
<h2><strong>A more natural way to work with data</strong></h2>
<p>Understanding the data is at the center of answering any business question.  For many users, this early stage of analysis can take time – especially when working with unfamiliar datasets.</p>
<p>Within SAS Visual Analytics, Copilot simplifies this process by acting as a guide to the data – helping users explore, understand and prepare their data for further analysis.</p>
<ul>
<li>To make the data fit-for-purpose, Copilot can change a data item’s properties – including the label, format and aggregation.</li>
<li>Copilot can also assist with common data transformations, including creating groups or bins from categories, defining hierarchies, and preparing data items for time-based or geospatial analysis.</li>
<li>Preparing data often requires creating entirely new calculations to answer a particular question. Instead of manually writing expressions to determine growth rate or profit margin, Copilot can generate new calculations from simple natural language.</li>
</ul>
<p>This conversational interface lowers barriers for business users while accelerating exploration for experienced analysts.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55273" src="https://blogs.sas.com/content/sgf/files/2026/03/SAS-Viya-Copilot-GIF-Expression.gif" alt="" width="1920" height="1080" /></p>
<h2><strong>From data to visuals – faster</strong></h2>
<p>Designing dashboards and reports often involves a series of manual steps – selecting visuals, assigning data roles, adjusting formatting, and refining layouts. Copilot helps streamline the process, enabling users to go from raw data to meaningful visual stories faster.</p>
<ul>
<li>Copilot can generate new report pages from scratch, automatically creating relevant visuals - like charts, tables, and other content like titles, headers and footers – based on your business question or area of analysis.</li>
<li>Designing dashboards is an iterative process – Copilot can refine existing reports by adding new visuals to the report page, replacing or changing existing visuals to show data in a different way, or deleting visuals or other content that are no longer relevant.</li>
<li>Copilot can focus insights by applying filters, ranks, display rules or interactions to existing visuals, helping narrow attention to the most relevant information.</li>
</ul>
<p>The goal is to remove friction from the workflow so users can work more efficiently. By automating many of the tasks involved in report building, Copilot enables designers to focus their time on communicating the story behind the data.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55306" src="https://blogs.sas.com/content/sgf/files/2026/04/SAS-Viya-Copilot-GIF-Create-Report-V3-1.gif" alt="" width="1920" height="1080" /></p>
<h2><strong>Insights only a question away</strong></h2>
<p>Reports and dashboards provide insights – and often lead to brand new questions. The conversational nature of Viya Copilot allows users to ask questions about their data and quickly receive tailored on-the-fly responses in real time.</p>
<ul>
<li>Copilot can create ad-hoc visualizations that help answer a user’s question. The categories, measures, and any additional logic – such as applied filters or ranks – are visible to the user, ensuring transparency into how the insight was produced.</li>
<li>New questions often emerge mid-analysis. Copilot retains the conversational context from earlier interactions to handle follow-up questions seamlessly.</li>
<li>Copilot can summarize visualizations, highlight key trends, and generate visual explanations that help users better understand relationships between important variables.</li>
</ul>
<p>In this way, curiosity becomes part of the workflow. Questions surface and can be explored immediately with Copilot acting as a collaborative AI assistant.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-55285" src="https://blogs.sas.com/content/sgf/files/2026/03/SAS-Viya-Copilot-GIF-NLQ.gif" alt="" width="1920" height="1080" /></p>
<h2><strong>A faster path from curiosity to clarity</strong></h2>
<p>SAS Visual Analytics has long included augmented analytics capabilities that automatically surface insights, highlight drivers, and explain outcomes. Viya Copilot builds on that foundation by adding generative AI to the experience.</p>
<p>With Copilot, analytics becomes conversational. This creates a more collaborative relationship between the user and the analytics platform - one where the system actively helps users navigate their analytical journey.</p>
<p>In the next blog post, we’ll focus on the Copilot capabilities available outside of the chat pane – embedding GenAI experiences directly into the user workflow for targeted assistance.</p>
<h3 data-start="791" data-end="889"><strong><a href="https://www.sas.com/en_us/software/viya/copilot.html">Learn more about how SAS Viya Copilot helps organizations turn analytical power into sustained decision momentum.</a></strong></h3>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/">From question to clarity: how SAS Viya Copilot changes the way we work with data</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/04/01/sas-viya-copilot-data/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/04/SA1101C9-150x150.jpg" />
	</item>
		<item>
		<title>SAS Innovate 2026 and you: the SAS user</title>
		<link>https://blogs.sas.com/content/sgf/2026/03/02/sas-innovate-for-users/</link>
					<comments>https://blogs.sas.com/content/sgf/2026/03/02/sas-innovate-for-users/#comments</comments>
		
		<dc:creator><![CDATA[Chris Hemedinger]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 22:01:26 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[SAS Global Forum]]></category>
		<category><![CDATA[SAS Innovate]]></category>
		<category><![CDATA[SAS user groups]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55226</guid>

					<description><![CDATA[<p>SAS Innovate 2026 features content and experiences especially for SAS user group presenters and SAS 9 users.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/03/02/sas-innovate-for-users/">SAS Innovate 2026 and you: the SAS user</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you're a SAS user who has not been to a SAS conference in a while, I want you to know that <a href="https://www.sas.com/en/events/sas-innovate.html">SAS Innovate 2026</a> was designed with you in mind.</p>
<a href="https://www.sas.com/en/events/sas-innovate.html" class="sc-button sc-button-default"><span><span class="btnheader">REGISTER </span> for SAS Innovate (April 27-30, 2026 in Grapevine TX)</span></a>
<p>Whether your day‑to‑day work happens in SAS 9, SAS Viya, or a thoughtful combination of both, SAS Innovate brings together the people, ideas, and practical guidance that help you get more value from SAS today —- while preparing for what's next.</p>
<p>This year's event doubles down on what SAS users have always valued most: learning from each other, sharing real‑world experience, and finding practical ways to work smarter with the tools you already rely on.</p>
<h2>SAS Users Day: Powered by the community</h2>
<p>One of the highlights of SAS Innovate 2026 is SAS Users Day -- an afternoon focused completely on SAS users as presenters and audience.</p>
<p>SAS Users Day celebrates the way SAS professionals learn best: through user groups, communities, and peer‑to‑peer knowledge sharing.</p>
<p>If you've ever picked up a tip at a local user group meeting, learned something valuable from a SAS Communities post, or borrowed code from a fellow user, SAS Users Day will feel like home. SAS Users Day takes place on Monday afternoon featuring experienced conference presenters, ending with a bit of social time for networking with your fellow users.</p>
<p>Expect:</p>
<ul>
<li>Sessions led by active SAS user group members
</li>
<li>Stories that reflect real constraints, real deadlines, and real wins
</li>
<li>Plenty of opportunities to connect with people who speak your SAS language
</li>
</ul>
<p>It's a reminder that while software matters, the SAS user community is one of the platform's greatest strengths.</p>
<h2>SAS 9: Productive today, Preparing for tomorrow</h2>
<figure id="attachment_55235" aria-describedby="caption-attachment-55235" style="width: 300px" class="wp-caption alignleft"><a href="https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9-300x298.png" alt="" width="300" height="298" class="size-medium wp-image-55235" srcset="https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9-300x298.png 300w, https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9-150x150.png 150w, https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9.png 745w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-55235" class="wp-caption-text">"Cooking with SAS 9" - throwback to 2003</figcaption></figure>If SAS 9 is still a big part of how you get work done, this SAS Innovate 2026 agenda is absolutely worth your time. Think of it as a chance to swap notes with people who've been there—sharing practical tips, hard‑won lessons, and smart ways to keep SAS 9 running strong while figuring out what comes next.</p>
<p><a href="https://innovate.sas.com/event/b8642a1b-9ad0-4af8-bc0f-cfac6a57724b/agenda?928f4d96-87ee-4ea5-8cc6-ce26563c56a0_928f4d96=SAS%209">Presenters in the SAS 9 track</a> include current SAS users, as well as developers in R&D's SAS 9 division who support the platform. What you'll learn:</p>
<ul>
<li>How other teams are keeping SAS 9 fast, stable, and reliable for real production workloads
</li>
<li>Simple, proven ways to clean up, manage, and future‑proof long‑lived SAS code
</li>
<li>Where SAS 9 still shines -- and where it makes sense to complement it with newer tools (including AI!)
</li>
<li>Practical patterns for integrating SAS 9 with cloud services, APIs, and open source
</li>
<li>Real stories from customers who are successfully running SAS 9 today (and planning tomorrow)
</li>
</ul>
<p>SAS Innovate works <strong>because of</strong> SAS users -- and it's built to work <strong>for you</strong>. <a href="https://www.sas.com/en/events/sas-innovate.html">Register now, and we'll see you there!</a></p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/03/02/sas-innovate-for-users/">SAS Innovate 2026 and you: the SAS user</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/sgf/2026/03/02/sas-innovate-for-users/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/03/cooking-sas9-150x150.png" />
	</item>
		<item>
		<title>Don&#039;t crash this ship! DuckDB is heading straight for Iceberg!</title>
		<link>https://blogs.sas.com/content/sgf/2026/02/23/sas-duckdb-iceberg/</link>
		
		<dc:creator><![CDATA[Joe Cabral]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 20:37:10 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[DuckDB]]></category>
		<category><![CDATA[Iceberg]]></category>
		<category><![CDATA[Parquet]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55163</guid>

					<description><![CDATA[<p>Since its inception, DuckDB has been commanding respect in the data management sphere, carving its place as a highly performant data processing system. At SAS, the rapid advancements DuckDB has made have gone far from unnoticed; that's why, in the 2025.07 release of SAS Viya, we introduced SAS/ACCESS Interface to [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/02/23/sas-duckdb-iceberg/">Don&#039;t crash this ship! DuckDB is heading straight for Iceberg!</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Since its inception, <a href="https://duckdb.org/">DuckDB</a> has been commanding respect in the data management sphere, carving its place as a highly performant data processing system. At SAS, the rapid advancements DuckDB has made have gone far from unnoticed; that's why, in the 2025.07 release of SAS Viya, we introduced <a href="https://documentation.sas.com/doc/en/pgmsascdc/default/acreldb/p1qjya05qkxd65n1j4pd7ln60lc7.htm">SAS/ACCESS Interface to DuckDB</a>. Over the last seven months, we're proud of the enhancements this has brought to the SAS suite, improving our compatibility and extensibility with open file formats like Parquet, regardless of your choice of data storage. But the job is far from done. In fact, it won't end until we've quacked our last... uh... if quack is the verb... what's the noun?.</p>
<h2>Introducing Iceberg support</h2>
<p>Today I'd like to share a very exciting development to the SAS/ACCESS Interface: <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/acreldb/n1d39ixj6e2a5pn1hdtutk0fk3ck.htm">enhanced Iceberg support</a>! As the mountain of data organizations face continues to grow exponentially, it's no surprise that cost-efficient data storage solutions have become a major focus. This focus is two-fold: where do we store our data, for one, and equally important, how do we store our data?</p>
<p>Open file formats like Parquet and Avro are excellent solutions for the latter question, but depending on your choice of storage solution, you might still experience high latency, poor performance, and dangerously high storage costs. Your storage strategy, of course, is likely stratified based on data access frequency and purpose, so it's unlikely to see an organization's entire corpus of data sitting in the same solution. Nonetheless, wherever you keep your data, you'll want your storage affordable and your access efficient. DuckDB and Iceberg, used in tandem, can provide an easy, readable, and efficient methodology for accessing, querying, and even editing data while stored in cost-conscious locations. And now, as of SAS Viya's 2026.01 release, you can wield all that power yourself, from the comfort of your own LIBNAME.</p>
<p>Let's dig in on the what, where, and how!</p>
<h2>Where's on First</h2>
<p>To be clear, this demonstration is surely not the only way to combine SAS, DuckDB, and Iceberg, but I've found it particularly easy, both as an administrator setting it up, and as a user leveraging it. From an admin perspective, the location we'll be keeping our data in today is AWS's S3 - but not the traditional buckets for object storage. Instead, we'll be <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html">using S3 Table Buckets</a>, which use Apache Iceberg to manage tables as objects, rather than just files. This is supremely important when working with open file formats <a href="https://parquet.apache.org/">like Parquet</a>, because the number one detractor from Parquet is the computational difficulty in editing it. Parquet is highly effective for querying thanks to its columnar nature and paginated metadata, but it requires full file re-writes in order to effect change. Iceberg, as a table format, mitigates this by using metadata files to manage versioning (among many other benefits) of the data they govern. As the top layer, S3 Table Buckets abstract all of these mechanisms away from the user, so all we see are query-ready tables in a conventional database structure.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Image.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Image.png" alt="" width="1752" height="784" class="alignnone size-full wp-image-55181" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Image.png 1752w, https://blogs.sas.com/content/sgf/files/2026/02/Image-300x134.png 300w, https://blogs.sas.com/content/sgf/files/2026/02/Image-1024x458.png 1024w, https://blogs.sas.com/content/sgf/files/2026/02/Image-768x344.png 768w, https://blogs.sas.com/content/sgf/files/2026/02/Image-1536x687.png 1536w" sizes="(max-width: 1752px) 100vw, 1752px" /></a></p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture1.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture1.png" alt="" width="790" height="551" class="alignnone size-full wp-image-55184" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture1.png 790w, https://blogs.sas.com/content/sgf/files/2026/02/Picture1-300x209.png 300w, https://blogs.sas.com/content/sgf/files/2026/02/Picture1-768x536.png 768w" sizes="(max-width: 790px) 100vw, 790px" /></a></p>
<h2>How's on Second</h2>
<p>By this point, the how is probably pretty clear: the joint operation of the SAS/ACCESS Interface to DuckDB. SAS/ACCESS Interfaces have long been used to connect to remote data sources in SAS 9 and Viya alike. But the DuckDB Interface brings a slightly different modus operandi; rather than being specifically designed to connect to a SINGLE type of data source (i.e. ACCESS to Snowflake, Databricks, etc.), the DuckDB ACCESS Interface can explicitly extend to ANY cloud storage supported <a href="https://duckdb.org/docs/stable/extensions/overview">by DuckDB's vast extension mechanism</a>. This extension mechanism is exactly what we'll be leveraging behind the scenes to establish a connection to Iceberg Tables, in this case those located on S3 Table Buckets.</p>
<p>To connect to Iceberg tables in an S3 Table Bucket, all we need is a LIBNAME statement, just as we would connect to any other remote data source. Here, duckdb is the engine name, and bowser is the library name:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #0000ff;">libname</span> bowser duckdb file_type=iceberg
  iceberg_catalog=<span style="color: #a020f0;">'arn:aws:s3tables:[region]:&lt;account-number&gt;:bucket/[bucket-name]'</span>
  iceberg_endpoint_type=s3_tables
  s3_access_key=<span style="color: #0000ff; font-weight: bold;">&amp;s3key</span>
  s3_secret=<span style="color: #0000ff; font-weight: bold;">&amp;s3secret</span>
  s3_region=<span style="color: #a020f0;">'[region]'</span>
  schema=<span style="color: #a020f0;">'[schema-name]'</span>;</pre></td></tr></table></div>

<p>Here's what you need to make this work:</p>
<ol>
<li>Find the <a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html">Amazon Resource Name (ARN)</a> of your Table Bucket. This value (in quotes) will be the iceberg_catalog option.
</li>
<li>Declare the file_type option to be iceberg and the iceberg_endpoint_type to be s3_tables. Note that while you can write a large portion of SAS code without any regard to capitalization, the values for these options MUST be lowercase.
</li>
<li>Define your s3_access_key and s3_secret. For general best practice, I used macro variables that I declared elsewhere (in single quotes). These credentials should be tied to a user in your AWS account that has read & write access to the source Table Bucket.
</li>
<li>Define the s3_region of your bucket. It's always good practice to keep your cloud resources in the same region when possible, as cross-regional data movement introduces extra latency.
</li>
<li>The last thing you'll need is the schema value. When looking inside your Table Bucket from the S3 GUI, you'll notice each table has an associated namespace. This value is the schema in the full qualified table location - so any given table in the bucket could be accessed explicitly at: iceberg_catalog.<em>&lt;namespace&gt;.&lt;table&gt;</em>.</li>
</ol>
<p>Once you have all this information, you're ready to test out your new DuckDB-powered Iceberg-backed LIBNAME! You'll notice that just like a traditional Library, your member tables are all present on the left-hand side of the GUI, as seen below. This presence is a slight distinction from some other SAS/ACCESS to DuckDB use cases, where connections to external cloud storage defined within explicit single-transaction PROC SQL / CONNECT statements would, by design, not be considered member tables. I consider the LIBNAME options as a best practice regardless of the data storage to which you’re connecting. Learn more about <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/acreldb/n18aa3kusiufghn1p2wr86twu7sr.htm">the options in the LIBNAME statement here</a>.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture5.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture5.png" alt="Library view" width="567" height="455" class="alignnone size-full wp-image-55187" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture5.png 567w, https://blogs.sas.com/content/sgf/files/2026/02/Picture5-300x241.png 300w" sizes="(max-width: 567px) 100vw, 567px" /></a></p>
<h2>What's on Third</h2>
<p>What I've done to the <a href="https://www.youtube.com/watch?v=sYOUFGfK4bU">classic Abbott & Costello skit</a> at this point is unforgiveable, but I'm in too deep to stop now. Let's get some SAS code on the board and showcase the ease and speed that SAS/ACCESS to DuckDB to bring to your Iceberg tables. Simplest behaviors first: how do we read Iceberg tables?</p>
<p><pre class="preserve-code-formatting">
PROC SQL outobs=10;
  SELECT * from BOWSER.target;
QUIT;
</pre><br />
In the above snippet, we're simply asking DuckDB to return the top 10 rows of the target table within the BOWSER library. It looks no different than any other PROC SQL implicit read. Typically, this Bowser target would be named Mario, but in this case, it's taxi data:</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture7.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture7.png" alt="" width="1044" height="179" class="alignnone size-full wp-image-55190" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture7.png 1044w, https://blogs.sas.com/content/sgf/files/2026/02/Picture7-300x51.png 300w, https://blogs.sas.com/content/sgf/files/2026/02/Picture7-1024x176.png 1024w, https://blogs.sas.com/content/sgf/files/2026/02/Picture7-768x132.png 768w" sizes="(max-width: 1044px) 100vw, 1044px" /></a></p>
<p>When we were defining the LIBNAME, I mentioned that the S3 Tables each had fully qualified names. This is useful here, because many programmers, including myself, like to use database-specific flavors of SQL. If you're a big fan of DuckDB's SQL flavor syntax, then explicit passthrough in PROC SQL is for you:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">PROC SQL;
  CONNECT USING BOWSER;
  SELECT * FROM CONNECTION TO BOWSER <span class="br0">&#40;</span>
    SELECT * FROM iceberg_catalog.main.target LIMIT <span style="">10</span>
  <span class="br0">&#41;</span>;        
QUIT;</pre></td></tr></table></div>

<p>Using the full name iceberg_catalog.main.target, we can use DuckDB-specific SQL on our S3 Table. Given the <a href="https://blogs.sas.com/content/sgf/2025/12/10/touchduck/">breadth of DuckDB's SQL capabilities</a>, this serves as a powerful connection without too much of a change to the PROC SQL wrapping syntax. Note that in both the implicit and the explicit passthrough scenarios, we are required to pay attention to capitalization for the bucket-specific resources. It doesn’t matter whether the LIBNAME is capitalized, but the case of the schema and table names must match their definition in the bucket.</p>
<p>Thanks to advancements in DuckDB itself at the tail end of 2025, SAS/ACCESS to DuckDB can not only read from Iceberg tables, but also write!</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">PROC SQL;
  CREATE TABLE BOWSER.line_items AS
    SELECT * FROM WORK.line_items;  
QUIT;</pre></td></tr></table></div>

<p>Once again, there's <a href="https://en.wikipedia.org/wiki/Standard_score">no deviation from the standards</a> of PROC SQL in table creation. This exact code might be useful if we wanted to transfer a SAS table (the above being from <a href="https://www.tpc.org/tpch/">the TPC-H datasets</a>) into an Iceberg Table in S3 as part of our storage strategy. In our S3 Table Bucket, we can validate that the new line_items table has been created:</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture9.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture9.png" alt="" width="516" height="429" class="alignnone size-full wp-image-55193" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture9.png 516w, https://blogs.sas.com/content/sgf/files/2026/02/Picture9-300x249.png 300w" sizes="(max-width: 516px) 100vw, 516px" /></a></p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture10.jpg"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture10.jpg" alt="" width="713" height="325" class="alignnone size-full wp-image-55196" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture10.jpg 713w, https://blogs.sas.com/content/sgf/files/2026/02/Picture10-300x137.jpg 300w" sizes="(max-width: 713px) 100vw, 713px" /></a></p>
<p>Maybe we want to perform some changes to this table down the line. If this table were stored simply as a Parquet file in a bucket, this would be a computationally expensive hassle, but thanks again to Iceberg, edits on these table objects are easy!</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">/* How many records do we have to start? A: <span style="">6001215</span> */
PROC SQL;
  SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM BOWSER.line_items;
QUIT;
&nbsp;
/* Delete all the records with ship-date before <span style="">1993</span> */
PROC SQL;
  DELETE FROM BOWSER.line_items
    WHERE L_SHIPDAT &lt;= '01JAN1993'd;
QUIT;
&nbsp;
/* Validation: How many records now? A: <span style="">5242432</span> */
PROC SQL;
  SELECT COUNT<span class="br0">&#40;</span>*<span class="br0">&#41;</span> FROM BOWSER.line_items;
QUIT;</pre></td></tr></table></div>

<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture12.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture12.png" alt="" width="523" height="195" class="alignnone size-full wp-image-55199" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture12.png 523w, https://blogs.sas.com/content/sgf/files/2026/02/Picture12-300x112.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></a></p>
<p>In just 8 seconds, DuckDB executed the removal of all records with a shipping date before 1993 from the table. Similarly, we can add or update records with ease. Do note <a href="https://iceberg.apache.org/spec/">the intricacies of versioning and deletions</a> within Iceberg that allow for such efficient editing of tables backed in immutable formats. I consider it important to understand not just the fact that DuckDB and Iceberg together add value, but why they do so behind the scenes.</p>
<p>The one caveat before we check into the performance of SAS/ACCESS to DuckDB + Iceberg is the current limitations on the editing side. With real-world data, adding, updating, and deleting records aren't the only things that happen. Often times, we want to mutate the structure of a table itself: add, update, or remove columns. This is currently not supported in DuckDB itself, though DuckDB.org explicitly lists "schema evolution" in <a href="https://duckdb.org/2025/11/28/iceberg-writes-in-duckdb#conclusion-and-future-work">their near future planning</a>. In the meantime, I highly recommend reading through the November announcement of <a href="https://duckdb.org/2025/11/28/iceberg-writes-in-duckdb">write capabilities in DuckDB</a> itself to learn the full extent of its capabilities.</p>
<h2>Bringing it Home</h2>
<p>I've harped on the value-add of DuckDB & Iceberg from the lens of SAS Viya for three bases now. Let's use a more in-depth query to validate the benefits. We'll use a widely popular (and freely available) dataset: the <a href="https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page">Yellow Taxi Trip Records</a> courtesy of NYC.gov - specifically a single Iceberg table encompassing data from 2024, titled yellow_tripdata_2024:</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture13.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture13.png" alt="" width="1469" height="279" class="alignnone size-full wp-image-55202" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture13.png 1469w, https://blogs.sas.com/content/sgf/files/2026/02/Picture13-300x57.png 300w, https://blogs.sas.com/content/sgf/files/2026/02/Picture13-1024x194.png 1024w, https://blogs.sas.com/content/sgf/files/2026/02/Picture13-768x146.png 768w" sizes="(max-width: 1469px) 100vw, 1469px" /></a></p>
<p>The 41 million row dataset occupies 6.27GB sitting as a local .sas7bdat to the Viya environment, backed on a disk with <a href="https://azure.microsoft.com/en-us/pricing/details/netapp/">NetApp Files Premium</a>. For this test, we've gone ahead and pre-converted the dataset into an Iceberg table sitting in the S3 Table Bucket, where it occupies 656MB. With both versions of the dataset available, the test consists of a single implicit PROC SQL statement, seen below:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">PROC SQL;
  SELECT
    passenger_count,
    payment_type,
    count<span class="br0">&#40;</span>*<span class="br0">&#41;</span>            AS num_trips,
    avg<span class="br0">&#40;</span>trip_distance<span class="br0">&#41;</span>  AS avg_distance,
    avg<span class="br0">&#40;</span>fare_amount<span class="br0">&#41;</span>    AS avg_fare,
    avg<span class="br0">&#40;</span>tip_amount<span class="br0">&#41;</span>     AS avg_tip
  FROM
    <span class="br0">&#91;</span>library<span class="br0">&#93;</span>.yellow_tripdata_2024
  WHERE
    passenger_count is not NULL AND
    passenger_count &gt; <span style="">0</span> AND
    passenger_count &lt; <span style="">5</span> AND
    trip_distance &lt; <span style="">100</span> AND
    trip_distance &gt; <span style="">0</span>
  GROUP BY
    passenger_count, payment_type
  ORDER BY
    payment_type, passenger_count; 
QUIT;</pre></td></tr></table></div>

<p>This query serves as a solid litmus test for overall engine performance, leveraging both CPU & I/O through its calculated columns, filtration, and ordering clause. We first ran it using a standard SAS Library connection to the data on the disk; then, we used the DuckDB Library to execute the query against the Iceberg table on the S3 Table Bucket. The test found a sizable improvement in both real-time and CPU-time performance by leveraging the S3 Table Bucket and querying it with the DuckDB engine:</p>
<table>
<thead>
<tr>
<th>Engine + Storage</th>
<th>Real Time (s)</th>
<th>CPU Time (s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Standard Engine + Azure NetApp Files Premium</td>
<td>25.82</td>
<td>18.96</td>
</tr>
<tr>
<td>DuckDB + Iceberg on S3 Tables Bucket</td>
<td>3.05</td>
<td>4.60</td>
</tr>
<tr>
<td><strong>Efficiency Boost by DuckDB</strong></td>
<td><strong>8.46x</strong></td>
<td><strong>4.12x</strong></td>
</tr>
</tbody>
</table>
<p>Now, while these results are exciting, I want to point out that not every query, not every table, and certainly not every use case will reap the same benefits. For example, some downstream analytical procedures in the SAS software suite that can't be mimicked with a querying engine. But there are tangible, and sometimes massive, performance improvements that SAS/ACCESS to DuckDB can introduce to your pipelines. To boot, the S3 Table Bucket that we used to back this experiment is significantly cheaper than many of the high-performance storage disks. Here's a sample calculation based on current rates and size assumptions:</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2026/02/Picture14.jpg"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2026/02/Picture14.jpg" alt="Savings Calculator" width="713" height="158" class="alignnone size-full wp-image-55205" srcset="https://blogs.sas.com/content/sgf/files/2026/02/Picture14.jpg 713w, https://blogs.sas.com/content/sgf/files/2026/02/Picture14-300x66.jpg 300w" sizes="(max-width: 713px) 100vw, 713px" /></a></p>
<p>Migrating this individual workload not only noticeably improved performance, but it reduced the storage cost of the backing data by just about 99%, while also adding in the aforementioned benefits of Iceberg tables like time travel and versioning.</p>
<p>The last 7 months have brought incredible developments to SAS's integration with open file formats, and I'm personally thrilled to both witness and build with the resulting solutions in the SAS software suite. If you’re interested in learning more about the capabilities of SAS/ACCESS to DuckDB, I highly recommend taking the official SAS course:<a href="https://learn.sas.com/course/view.php?id=8699"> Working with DuckDB in SAS Viya®</a>. It's quick, informative, and shows you a handful of tips, tricks, and best practices for maximizing the value of the engine. As always, thank you for reading, and I’ll see you at home plate.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/02/23/sas-duckdb-iceberg/">Don&#039;t crash this ship! DuckDB is heading straight for Iceberg!</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/02/DuckDB_logo-150x150.png" />
	</item>
		<item>
		<title>Engage for Managed Cloud Services: Strategic automation for the future</title>
		<link>https://blogs.sas.com/content/sgf/2026/01/09/engage-for-managed-cloud-services-strategic-automation-for-the-future/</link>
		
		<dc:creator><![CDATA[John Conoley]]></dc:creator>
		<pubDate>Fri, 09 Jan 2026 19:37:23 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[SAS Administrators]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55140</guid>

					<description><![CDATA[<p>Engage is a strategic automation framework that enables SAS to deliver cloud services with speed, precision and scalability. Whether supporting custom enterprise deployments or standardized offerings, Engage helps us deliver value faster and more reliably to our hosted customers.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/09/engage-for-managed-cloud-services-strategic-automation-for-the-future/">Engage for Managed Cloud Services: Strategic automation for the future</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>“Speed it up, lock it down, and cut the clutter. If we’re not moving forward, we’re falling behind.” Some iteration of this message is hard not to feel in today’s world where pressures are rising to innovate and deliver. Fast. </p>
<p>At SAS, our Managed Cloud Services (MCS) division strives to meet these demands head-on through a powerful automation engine: the Engage platform. </p>
<p>Engage is a strategic automation framework that enables SAS to deliver cloud services with speed, precision and scalability. Whether supporting custom enterprise deployments or standardized offerings, Engage helps us deliver value faster and more reliably to our hosted customers. </p>
<h2>What is Engage?</h2>
<p>Engage is SAS’ internal automation platform designed to streamline service delivery across cloud environments. It powers everything from infrastructure provisioning to life cycle management, enabling self-service workflows and near real-time results. Built on modern cloud principles like Infrastructure as Code (IaC), DevOps, FinOps and security governance, Engage is the backbone of our cloud management strategy.  </p>
<p>Within SAS Managed Cloud Services, Engage supports three core service lines: </p>
<ul>
<li>Managed Cloud Services Enterprise: Tailored infrastructure for high-revenue contracts.</li>
<li>
Managed Cloud Services Fleet: Immutable, standardized offerings for scale. </li>
<li>
Managed Cloud Services Developer Experience (DevExp): Automation and governance for internal teams.</li>
</ul>
<p>Let’s explore how each delivers strategic value. </p>
<h2>SAS Managed Cloud Services Enterprise: Custom Infrastructure at Scale </h2>
<p>For customers with complex requirements, SAS Managed Cloud Services Enterprise provides tailored infrastructure and software deployments. Engage automates the sizing and provisioning process by pulling data from each customer’s Cloud Card and translating it into precise infrastructure builds using IaC. </p>
<p>Once the infrastructure is ready, build administrators use Engage to trigger software installations via auto-DaC workflows. This automation reduces deployment timelines and enables flexible customization, accelerating time to value without sacrificing control. </p>
<p>What’s the strategic value? Enterprise customers get access to bespoke environments faster, with fewer manual steps and greater consistency. </p>
<h2>Managed Cloud Services Fleet: Immutable, Pre-Packaged Offerings</h2>
<h2>
<p>Managed Cloud Services Fleet is designed for scale. It delivers standardized SAS® Viya®  environments, like  SAS® Viya® Essentials, that can be provisioned in under two hours. These offerings include pre-sized infrastructure and standardized software orders (e.g., Visual Analytics, Visual Statistics), all delivered through the Engage Catalog. </p>
<p>Because Fleet environments are immutable, lifecycle automation becomes predictable and reliable. Build administrators provide minimal inputs, and Engage handles the rest, right up to identity provider integration. </p>
<p>What’s the strategic value? Fleet enables rapid deployment at scale, making it ideal for SMBs, trials, and repeatable use cases. </p>
</h2>
<h2>Managed Cloud Services Developer Experience: Empowering Automation and Governance </h2>
<p>Behind the scenes, our Developer Experience (DevExp) framework empowers SAS teams to build, deploy, and manage automation across hyperscaler environments like Azure, AWS, and Google Cloud.<br />
DevExp includes: </p>
<ul>
<li>Code repositories and CI/CD pipelines. </li>
<li>
Governance tools for compliance. </li>
<li>
Integration with platforms like Azure DevOps and GitHub Actions. </li>
<li>
Self-service portals via MCAP, ServiceNow and Engage. </li>
<li>
Life cycle management for infrastructure and operations. </li>
<li>A developer control plane for monitoring, logging, security and observability. </li>
</ul>
<p>DevExp supports both Enterprise and Fleet offerings, ensuring automation is standardized, repeatable and scalable. </p>
<p>What’s the strategic value? DevExp enables internal teams to innovate faster while maintaining governance and transparency. </p>
<h2>Continuous Innovation: What’s Next for Engage and Managed Cloud Services</h2>
<p>Our journey with Engage is far from over. The platform is evolving to support AI-infused automation, deeper integrations with hyperscaler services, and expanded partner access. These innovations will further reduce friction, improve customer experience, and unlock new possibilities for service delivery. </p>
<p>As we continually modernize our cloud frameworks, Engage remains central to our strategy, helping us deliver smarter, faster and more secure cloud services.</p>
<p>Engage is setting a new standard for automation in SAS Managed Cloud Services. By combining self-service workflows, lifecycle automation and modern cloud principles, SAS is delivering faster outcomes and better experiences for our customers. </p>
<p>Interested in learning more? Read our white paper, <a href="https://www.sas.com/content/dam/sasdam/documents/20250124/enabling-data-and-analytics-in-the-cloud.pdf"><em>Enabling data and analytics in the cloud.</em></a></p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/09/engage-for-managed-cloud-services-strategic-automation-for-the-future/">Engage for Managed Cloud Services: Strategic automation for the future</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2026/01/cloud-download-icon-line-connection-circuit-board-150x150.jpg" />
	</item>
		<item>
		<title>Update Data Live in SAS Viya: Integrating SAS Code with Interactive Reports</title>
		<link>https://blogs.sas.com/content/sgf/2026/01/08/update-data-live-in-sas-viya-integrating-sas-code-with-interactive-reports/</link>
		
		<dc:creator><![CDATA[Danny Sprukulis]]></dc:creator>
		<pubDate>Thu, 08 Jan 2026 14:00:01 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=55023</guid>

					<description><![CDATA[<p>In SAS Viya 4, we can embed inputs directly on the reporting page with live results. These reports have code that takes user inputs and runs the program, which will run the dataset and update it with the most recent data. This gives the user the ability to create datasets [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/08/update-data-live-in-sas-viya-integrating-sas-code-with-interactive-reports/">Update Data Live in SAS Viya: Integrating SAS Code with Interactive Reports</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left"><span style="color: #000000"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating.jpg"><img loading="lazy" decoding="async" class="wp-image-55053 alignright" src="https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating-300x192.jpg" alt="" width="377" height="241" srcset="https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating-300x192.jpg 300w, https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating-1024x656.jpg 1024w, https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating-768x492.jpg 768w, https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating.jpg 1096w" sizes="(max-width: 377px) 100vw, 377px" /></a>In SAS Viya 4, we can embed inputs directly on the reporting page with live results. These reports have code that takes user inputs and runs the program, which will run the dataset and update it with the most recent data. This gives the user the ability to create datasets on the fly and share the results with their teams.</span></p>
<p><span style="color: #000000">We begin with our code, which creates macros that can communicate with our report and eventually the job that runs in the background of the report. Below (Figure 1), we can see the variables being brought into the code. They are then assigned values that will be used in our code and formulas (in my example, I have an optimization running in SAS code called Opt_Article.sas, which is where the macros are referenced). The code can then run in whichever program the user would like, but at the end of the program, there must be an upload process to get the final table into the CAS engine. Our table is named Project_Opt. This table will come into play later. For this example I am assigning values to project capacity, which could be used as budgets and time constraints.</span></p>
<figure id="attachment_55056" aria-describedby="caption-attachment-55056" style="width: 386px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating1.png"><img loading="lazy" decoding="async" class="wp-image-55056 " src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating1.png" alt="" width="386" height="148" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating1.png 318w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating1-300x115.png 300w" sizes="(max-width: 386px) 100vw, 386px" /></a><figcaption id="caption-attachment-55056" class="wp-caption-text"><span style="color: #000000">Figure 1: Macro Variables being assigned</span></figcaption></figure>
<p>&nbsp;</p>
<p><span style="color: #000000">For this code to update a report live, the code must finish with an upload statement that takes down the previous dataset and replaces it with the updated dataset with the same name (Figure 2).</span></p>
<figure id="attachment_55059" aria-describedby="caption-attachment-55059" style="width: 615px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating2-1.png"><img loading="lazy" decoding="async" class="wp-image-55059" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating2-1.png" alt="" width="615" height="163" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating2-1.png 740w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating2-1-300x79.png 300w" sizes="(max-width: 615px) 100vw, 615px" /></a><figcaption id="caption-attachment-55059" class="wp-caption-text"><span style="color: #000000">Figure 2: The table created from the program is called work.solution, it is then fed to a temporary table that exchanges the dataset with Project_Opt, leaving just the most up to date data in Project_Opt</span></figcaption></figure>
<p><span style="color: #000000">The next step is to create a job in SAS. The user must create a new Job Definition and change the form to HTML. In the code, the user will need to create HTML code that reflects the inputs required by the macros. In Figure 3, the HTML for the inputs are shown. These allow the user to provide a base value and title for the input.</span></p>
<figure id="attachment_55050" aria-describedby="caption-attachment-55050" style="width: 620px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating3-1.png"><img loading="lazy" decoding="async" class="wp-image-55050 size-full" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating3-1.png" alt="" width="620" height="208" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating3-1.png 620w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating3-1-300x101.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></a><figcaption id="caption-attachment-55050" class="wp-caption-text"><span style="color: #000000">Figure 3: HTML of an input variable</span></figcaption></figure>
<p><span style="color: #000000">Then, the program side of the job must reference the code the user created that contains the formulas that utilize the macros (Figure 4).</span></p>
<figure id="attachment_55062" aria-describedby="caption-attachment-55062" style="width: 766px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating4.png"><img loading="lazy" decoding="async" class="wp-image-55062 size-full" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating4.png" alt="" width="766" height="564" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating4.png 766w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating4-300x221.png 300w" sizes="(max-width: 766px) 100vw, 766px" /></a><figcaption id="caption-attachment-55062" class="wp-caption-text"><span style="color: #000000">Figure 4: Code for referencing the HTML, creating an input interface, and referencing the original program using the macros (Opt_Article.sas)</span></p>
<dd></figcaption></figure>
<p><span style="color: #000000">On the right-hand side of the job interface, the parameters must be selected (Figure 5). This is where the macros need to be reflected for the report, matching the ones entered in the code and HTML. The additional parameters are for debugging purposes.</span></p>
<p><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-1.png"><img loading="lazy" decoding="async" class=" wp-image-55065" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-1.png" alt="" width="205" height="428" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-1.png 248w, https://blogs.sas.com/content/sgf/files/2025/12/Figure5-1-144x300.png 144w" sizes="(max-width: 205px) 100vw, 205px" /></a></p>
<p><span style="color: #000000"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-2.png"><img loading="lazy" decoding="async" class="wp-image-55068 aligncenter" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-2.png" alt="" width="301" height="420" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-2.png 386w, https://blogs.sas.com/content/sgf/files/2025/12/Figure5-2-215x300.png 215w" sizes="(max-width: 301px) 100vw, 301px" /></a></span></p>
<p><span style="color: #000000"><em>Figure 5: Input Parameters (left) and setting up the parameters (right)</em></span></p>
<p><span style="color: #000000">Once this is completed, the job is ready for use. Copy the URL provided in the properties tab under Job URL (Figure 6).</span></p>
<figure id="attachment_55074" aria-describedby="caption-attachment-55074" style="width: 260px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating6.png"><img loading="lazy" decoding="async" class="size-full wp-image-55074" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating6.png" alt="" width="260" height="840" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating6.png 260w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating6-93x300.png 93w" sizes="(max-width: 260px) 100vw, 260px" /></a><figcaption id="caption-attachment-55074" class="wp-caption-text"><span style="color: #000000">Figure 6: Under the properties tab, copy the address of the Job URL</span></figcaption></figure>
<p><span style="color: #000000">Then, in a VA report, select the Web Content object. In the options tab of the object, place the URL. The job interface should appear. The user must then bring in the table that is created from the program, Project_Opt (Figure 7).</span></p>
<figure id="attachment_55077" aria-describedby="caption-attachment-55077" style="width: 484px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating7.png"><img loading="lazy" decoding="async" class="size-full wp-image-55077" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating7.png" alt="" width="484" height="394" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating7.png 484w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating7-300x244.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating7-168x137.png 168w" sizes="(max-width: 484px) 100vw, 484px" /></a><figcaption id="caption-attachment-55077" class="wp-caption-text"><span style="color: #000000">Figure 7: The Web Content Object with the Job URL linked inside of it.</span></figcaption></figure>
<p><span style="color: #000000">The data can now be shown in graphical interfaces. In the options tab for any graph using the table, select Periodically Reload Data and set a short timeframe. Then switch to non-edit mode and run the job (Figure 8).</span></p>
<figure id="attachment_55080" aria-describedby="caption-attachment-55080" style="width: 936px" class="wp-caption aligncenter"><a style="color: #000000" href="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating8.png"><img loading="lazy" decoding="async" class="size-full wp-image-55080" src="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating8.png" alt="" width="936" height="454" srcset="https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating8.png 936w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating8-300x146.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/webcontentupdating8-768x373.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></a><figcaption id="caption-attachment-55080" class="wp-caption-text"><span style="color: #000000">Figure 8: Final report which will update live after each Submit on the Web Content object. The report must not be in edit mode to get the updates.</span></figcaption></figure>
<p><span style="color: #000000">The report should update as you run the submission, providing the updated dataset and report. This allows the user to share project results live with their teammates and gives non-coders the ability to manipulate the datasets to generate value for their workforce.</span></dd>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/08/update-data-live-in-sas-viya-integrating-sas-code-with-interactive-reports/">Update Data Live in SAS Viya: Integrating SAS Code with Interactive Reports</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2025/12/WebContentUpdating-150x150.jpg" />
	</item>
		<item>
		<title>Uploading and visualizing custom shapefiles in SAS Viya</title>
		<link>https://blogs.sas.com/content/sgf/2026/01/07/shapefiles-in-sas-viya/</link>
		
		<dc:creator><![CDATA[Danny Sprukulis]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 17:49:28 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[CAS]]></category>
		<category><![CDATA[custom regions]]></category>
		<category><![CDATA[data visualization]]></category>
		<category><![CDATA[geographic visualization]]></category>
		<category><![CDATA[geospatial data]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[SAS macros]]></category>
		<category><![CDATA[SAS Visual Analytics]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[shapefiles]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=54981</guid>

					<description><![CDATA[<p>Learn how to create and visualize custom geographic regions in SAS Viya Visual Analytics, either by grouping existing map shapes or by uploading and configuring shapefiles to support regions with custom borders.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/07/shapefiles-in-sas-viya/">Uploading and visualizing custom shapefiles in SAS Viya</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure id="attachment_54984" aria-describedby="caption-attachment-54984" style="width: 293px" class="wp-caption alignright"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images.png" alt="World map" width="293" height="164" class="size-full wp-image-54984" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images.png 1172w, https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images-300x168.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images-1024x573.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Photo-Source-Getty-Images-768x430.png 768w" sizes="(max-width: 293px) 100vw, 293px" /></a><figcaption id="caption-attachment-54984" class="wp-caption-text">Photo Source: Getty Images</figcaption></figure>
<p>SAS Viya has a large list of mapping shapes for geographic visualizations, but sometimes business units have custom regions that need to be displayed. These can range from individual counties, sales regions, postal codes, and voting regions. To properly visualize these regions, SAS has a process to bring in regions with custom borders.</p>
<p>SAS already has many regions preloaded into the system. When creating a new geography item in Visual Analytics, Viya has three options: Geographic name or code lookup, Geographic data provider, or Latitude and Longitude in data. For building regions that are already in SAS, select the geographic name or code lookup option. A drop-down list will appear asking for a Name or Code lookup (Figure 1).</p>
<figure id="attachment_54987" aria-describedby="caption-attachment-54987" style="width: 614px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value.png" alt="" width="614" height="305" class="size-full wp-image-54987" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value.png 1638w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value-300x149.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value-1024x508.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value-768x381.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value-1536x761.png 1536w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-1-New-geography-item-selection-screen-selecting-the-name-or-lookup-value-164x82.png 164w" sizes="(max-width: 614px) 100vw, 614px" /></a><figcaption id="caption-attachment-54987" class="wp-caption-text">Figure 1: New geography item selection screen, selecting the name or lookup value</figcaption></figure>
<p>Depending on the user data, the context will change. If the column has full country names, use Country or Region Names. If there are 2 letter state names, use that option. There are quite a few options (Figure 2) but for regions that cover whole states and do not have custom borders/shapes outside of political boundaries, the option of Subdivision (State, province) Names is ideal. When that option is selected, another drop-down will appear for the country that the data refers to, giving worldwide options for region shapes (Figure 3).</p>
<figure id="attachment_54990" aria-describedby="caption-attachment-54990" style="width: 585px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-2-Selecting-the-option-for-province-names-in-the-lookup.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-2-Selecting-the-option-for-province-names-in-the-lookup.png" alt="" width="585" height="408" class="size-full wp-image-54990" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-2-Selecting-the-option-for-province-names-in-the-lookup.png 780w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-2-Selecting-the-option-for-province-names-in-the-lookup-300x209.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-2-Selecting-the-option-for-province-names-in-the-lookup-768x536.png 768w" sizes="(max-width: 585px) 100vw, 585px" /></a><figcaption id="caption-attachment-54990" class="wp-caption-text">Figure 2: Selecting the option for province names in the lookup</figcaption></figure>
<figure id="attachment_54993" aria-describedby="caption-attachment-54993" style="width: 734px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific.png" alt="" width="734" height="218" class="size-full wp-image-54993" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific.png 1836w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific-300x89.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific-1024x305.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific-768x228.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-3-When-the-subdivision-option-is-selected-the-options-will-be-country-specific-1536x457.png 1536w" sizes="(max-width: 734px) 100vw, 734px" /></a><figcaption id="caption-attachment-54993" class="wp-caption-text">Figure 3: When the subdivision option is selected, the options will be country specific</figcaption></figure>
<p>The user can now visualize the provinces/states for individual countries (Figure 4). But, sometimes these regions are tied together. To combine these predefined provinces, the user can create a custom category. In the data tab, create a custom category. Add the geography item created before to be “Based on”. Then add each of the provinces to individual groups for each region (Figure 5). Then add a button bar or filter to individually select the regions to display (Figure 6). A data tip value can be added so when hovering over the map, the business region will appear.</p>
<figure id="attachment_54996" aria-describedby="caption-attachment-54996" style="width: 791px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS.png" alt="" width="791" height="438" class="size-full wp-image-54996" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS.png 1054w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS-300x166.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS-1024x567.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-4-A-map-of-Canada-created-using-the-Figure-3-options.-These-shapes-are-preloaded-by-SAS-768x426.png 768w" sizes="(max-width: 791px) 100vw, 791px" /></a><figcaption id="caption-attachment-54996" class="wp-caption-text">Figure 4: A map of Canada created using the Figure 3 options—These shapes are preloaded by SAS</figcaption></figure>
<figure id="attachment_54999" aria-describedby="caption-attachment-54999" style="width: 858px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes.png" alt="" width="858" height="395" class="size-full wp-image-54999" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes.png 1144w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes-300x138.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes-1024x471.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-5-Custom-Category-creating-groups-of-region-shapes-768x353.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></a><figcaption id="caption-attachment-54999" class="wp-caption-text">Figure 5: Custom Category creating groups of region shapes</figcaption></figure>
<figure id="attachment_55002" aria-describedby="caption-attachment-55002" style="width: 777px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces.png" alt="" width="777" height="435" class="size-full wp-image-55002" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces.png 1036w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces-300x168.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces-1024x573.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-6-Using-the-custom-category-to-visualize-the-regiongroup-of-provinces-768x430.png 768w" sizes="(max-width: 777px) 100vw, 777px" /></a><figcaption id="caption-attachment-55002" class="wp-caption-text">Figure 6: Using the custom category to visualize the region/group of provinces</figcaption></figure>
<p>Now, if the region has custom borders, there is a process for this. To start this process, the user must have Geographic permissions from the admin of the Viya environment (Full admin permissions also work). Once that is completed, they can begin. To start, the user needs to have a shapefile of the region they wish to bring to SAS. The files required for this process to properly run are .shp, .shx, .dbf, and .prj files (Figure 7). These files are used to turn a shapefile into a dataset SAS can read. </p>
<figure id="attachment_55005" aria-describedby="caption-attachment-55005" style="width: 475px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-7-Files-needed-to-create-custom-regions-in-SAS.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-7-Files-needed-to-create-custom-regions-in-SAS.png" alt="" width="475" height="247" class="size-full wp-image-55005" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-7-Files-needed-to-create-custom-regions-in-SAS.png 792w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-7-Files-needed-to-create-custom-regions-in-SAS-300x156.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-7-Files-needed-to-create-custom-regions-in-SAS-768x400.png 768w" sizes="(max-width: 475px) 100vw, 475px" /></a><figcaption id="caption-attachment-55005" class="wp-caption-text">Figure 7: Files needed to create custom regions in SAS</figcaption></figure>
<p>Once those files are in SAS, a SAS macro will need to be run. This macro (Figure 8) has <> brackets where the user will need to fill out. The shape file path is the path to the .shp file location. The .shp file must be stored with the other 3 files in the same folder. The ID column is the column with the names of the regions in the shapefile dataset. This file is what maps data to the file once in Visual Analytics by mapping the categorical column that contains the region name and joins it with the shapefile names. If the id column is unknown to the user, I have found a way that if the code is run with the other blanks filled, the code will run with errors but the columns in the .shp file are revealed with the rows. To do this, give the &lt;insert ID Column&gt; a random name and once the name of the column is discovered, replace the ID and rerun the code. The outtable is the name that the SAS dataset will take on after the code is run. The cashost and casport are values found in Manage Environment in the Servers tab, just copy those values over. Lastly, the caslib selection is which library the SAS dataset will be outputted in (Public or casuser typically).</p>
<figure id="attachment_55008" aria-describedby="caption-attachment-55008" style="width: 3184px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro.png" alt="" width="3184" height="288" class="size-full wp-image-55008" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro.png 3184w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro-300x27.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro-1024x93.png 1024w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro-768x69.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro-1536x139.png 1536w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-8-SAS-shapefile-upload-macro-2048x185.png 2048w" sizes="(max-width: 3184px) 100vw, 3184px" /></a><figcaption id="caption-attachment-55008" class="wp-caption-text">Figure 8: SAS shapefile upload macro</figcaption></figure>
<p>Once the macro has run successfully, the user can navigate to Visual Analytics. This is where the shapefiles are connected to the dataset. Make sure the user’s data containing the region values is included in the report. Then select “New Data Item” in the data pane and “New Geography Item”. Select the region column that has the region names for the “Based on” item. Then select “Geographic data provider”. This is where the new region shapes are created. If the user has created these regions before, they can use a provider in the drop-down menu. In this case a new provider is needed, so click on the three dot icon. Select “New provider” (Figure 9).</p>
<figure id="attachment_55011" aria-describedby="caption-attachment-55011" style="width: 768px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-9-Selecting-the-Geographic-data-provider-and-New-provider-options.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-9-Selecting-the-Geographic-data-provider-and-New-provider-options.png" alt="" width="768" height="416" class="size-full wp-image-55011" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-9-Selecting-the-Geographic-data-provider-and-New-provider-options.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-9-Selecting-the-Geographic-data-provider-and-New-provider-options-300x163.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></a><figcaption id="caption-attachment-55011" class="wp-caption-text">Figure 9: Selecting the Geographic data provider and New provider options</figcaption></figure>
<p>The new geographic data provider menu will appear. Enter a Name and a Label; these can be the same or different. This determines how the provider will appear the next time the user wants to use these shapes. Leave Type and Server the same, unless the shapefile macro was saved elsewhere. Select the Library to where the macro in Figure 8 had caslib pointing to (Public in this case). Select the outtable created for the table selection. Select Polygon for geometry. Change the ID column to the value used in id for Figure 8. Then have _seq_, SEGMENT, Y, X for the next 4 options (Figure 10). Lastly, the coordinate space is needed.</p>
<p>Depending on where the .shp was found, it could be a variety of different values. WGS84 is the standard I like to work with but when shapefiles are sourced from outside of the user’s ArcGIS then custom options can be needed. If the EPSG value is known, select coordinate space as custom value and then “EPSG &lt;4-digit number>”. The user may not get it correct on the first try so keep trying different numbers as the EPSG value (that are somewhat close to the estimated value. Googling the value is an option as well). A wrong EPSG value may put the shapes all over the map but as the guesses get closer, the shapes will appear closer to their actual location. </p>
<figure id="attachment_55014" aria-describedby="caption-attachment-55014" style="width: 447px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-10-Inputs-to-create-the-custom-regions-in-Visual-Analytics.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-10-Inputs-to-create-the-custom-regions-in-Visual-Analytics.png" alt="" width="447" height="555" class="size-full wp-image-55014" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-10-Inputs-to-create-the-custom-regions-in-Visual-Analytics.png 596w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-10-Inputs-to-create-the-custom-regions-in-Visual-Analytics-242x300.png 242w" sizes="(max-width: 447px) 100vw, 447px" /></a><figcaption id="caption-attachment-55014" class="wp-caption-text">Figure 10: Inputs to create the custom regions in Visual Analytics</figcaption></figure>
<p>Once this is complete, the provider will be created. Now returning to the geography item page, select ID column as the same as the “Based on” column. Then the regions are complete. Select a geo-region map in the objects pane and select the new geography item as the geography (Figure 11).</p>
<figure id="attachment_55017" aria-describedby="caption-attachment-55017" style="width: 678px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions.png" alt="" width="678" height="482" class="size-full wp-image-55017" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions.png 904w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions-300x213.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions-768x545.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions-269x192.png 269w" sizes="(max-width: 678px) 100vw, 678px" /></a><figcaption id="caption-attachment-55017" class="wp-caption-text">Figure 11: The visualized custom regions</figcaption></figure>
<p>The new shapes are properly uploaded into SAS and can be visualized with data. The users now have the freedom to map any territory they prefer and can customize their mapping reports. By combining SAS Viya’s built-in geographic options with the ability to upload custom shapefiles, users can accurately represent business-specific regions that go beyond standard political boundaries. Whether you are grouping existing regions or bringing in fully custom shapes, this process gives you the flexibility to create precise, meaningful maps that better reflect how your organization views and analyzes geographic data.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://blogs.sas.com/content/sgf/2025/12/16/mapping-data-over-images/">Mapping data over images</a></li>
<li><a href="https://blogs.sas.com/content/sgf/2025/01/10/utilizing-sas-viyas-geocoding-capabilities-for-multiple-data-configurations-and-languages/">Utilizing SAS Viya’s Geocoding capabilities for multiple data configurations and languages</a></li>
<li><a href="https://blogs.sas.com/content/sgf/2024/12/20/simulating-theme-park-wait-times-within-sas-viya-creating-a-live-solution-for-hospitality-operations/">Simulating theme park wait times within SAS Viya, creating a live solution for hospitality operations</a></li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2026/01/07/shapefiles-in-sas-viya/">Uploading and visualizing custom shapefiles in SAS Viya</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2025/12/Figure-11-The-visualized-custom-regions-150x150.png" />
	</item>
		<item>
		<title>The afterparty: Hyperparameter autotuning revisited</title>
		<link>https://blogs.sas.com/content/sgf/2025/12/17/the-afterparty-hyperparameter-autotuning-revisited/</link>
		
		<dc:creator><![CDATA[Stu Sztukowski]]></dc:creator>
		<pubDate>Wed, 17 Dec 2025 21:21:52 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Cross-Validation]]></category>
		<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Higgs boson]]></category>
		<category><![CDATA[Hyperparameter Tuning]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[model interpretability]]></category>
		<category><![CDATA[model optimization]]></category>
		<category><![CDATA[neural networks]]></category>
		<category><![CDATA[SAS Viya Workbench]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=54849</guid>

					<description><![CDATA[<p>In my first article on hyperparameter autotuning, I used a cake analogy to show how to use hyperparameter autotuning with Optuna and the sasviya.ml package in Python to improve detecting Higgs bosons in a particle accelerator. SAS Viya Workbench now supports hyperparameter autotuning in SAS code with a variety of [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2025/12/17/the-afterparty-hyperparameter-autotuning-revisited/">The afterparty: Hyperparameter autotuning revisited</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="color:#000000">In </span><a href="https://blogs.sas.com/content/sgf/2025/06/13/boost-ml-accuracy-with-hyperparameter-tuning/">my first article on hyperparameter autotuning</a><span style="color:#000000">, I used a cake analogy to show how to use hyperparameter autotuning with Optuna and the sasviya.ml package in Python to improve detecting Higgs bosons in a particle accelerator. SAS Viya Workbench now supports hyperparameter autotuning in SAS code with a variety of different machine learning models, helping you achieve greater accuracy with less code. Remember how using Optuna was like asking Gordon Ramsay to critique our cake? In Python, we had to get him into the kitchen and tell him what to critique and how to critique it. This time, </span><em style="color:#000000">he’s already here and ready to yell at you</em><span style="color:#000000">.</span></p>
<p>Let’s take a look at the absolute minimum amount of code needed to perform hyperparameter autotuning with a gradient boosting model using SAS code.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #000080; font-weight: bold;">proc gradboost</span> <span style="color: #000080; font-weight: bold;">data</span>=sashelp.iris;
    autotune;
    target species / level=nominal;
    <span style="color: #0000ff;">input</span> <span style="color: #0000ff;">_NUMERIC_</span>;
<span style="color: #000080; font-weight: bold;">run</span>;</pre></td></tr></table></div>

<p>Yep. That’s it. It’s literally one extra line: autotune.</p>
<p>When you add this single line, SAS will run it through a genetic algorithm, partition it into a 70/30 train/validation split, run multiple parallel evaluations in a single iteration, and automatically stop after either 50 evaluations, 5 iterations, 10 hours, or stagnation in 4 iterations. Each hyperparameter has pre-configured default bounds and is fully modifiable. If you’re curious as to what these defaults are, <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbcasml/vwbcasml_gradboost_syntax02.htm">check out the documentation for the AUTOTUNE statement in PROC GRADBOOST</a>.</p>
<p>That’s a whole lot of things happening from that one little statement. This gives you a good baseline, and considering how well-tuned the default values are, it may end up being all you need.</p>
<h2>Predicting Higgs bosons with SAS</h2>
<p>Let’s go back to solving the <a href="https://archive.ics.uci.edu/dataset/280/higgs">Higgs boson prediction problem</a>, and this time we’ll do it with SAS code. One thing I love about programming in SAS is how compact the code is for modeling. To show you how little code is needed to solve this problem in its entirety, I’m going to post the whole program below.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #0000ff;">filename</span> inpipe pipe <span style="color: #a020f0;">&quot;unzip -p /workspaces/myfolder/data/higgs.zip | gunzip -c&quot;</span>;
&nbsp;
<span style="color: #0000ff;">%let</span> colnames = signal lepton_pt lepton_eta lepton_phi 
                missing_energy_magnitude missing_energy_phi
                jet_1_pt jet_1_eta jet_1_phi jet_1_btag
                jet_2_pt jet_2_eta jet_2_phi jet_2_btag
                jet_3_pt jet_3_eta jet_3_phi jet_3_btag
                jet_4_pt jet_4_eta jet_4_phi jet_4_btag
                m_jj m_jjj m_lv m_jlv m_bb m_wbb m_wwbb
                ;
&nbsp;
<span style="color: #000080; font-weight: bold;">data</span> higgs;
    <span style="color: #0000ff;">infile</span> inpipe dlm=<span style="color: #a020f0;">','</span> dsd;
    <span style="color: #0000ff;">input</span> <span style="color: #0000ff; font-weight: bold;">&amp;colnames</span>;
    <span style="color: #0000ff;">drop</span> m_:;
<span style="color: #000080; font-weight: bold;">run</span>;
&nbsp;
<span style="color: #000080; font-weight: bold;">proc gradboost</span> <span style="color: #000080; font-weight: bold;">data</span>=higgs outmodel=low_level_model seed=<span style="color: #2e8b57; font-weight: bold;">42</span> earlystop<span style="color: #66cc66;">&#40;</span>stagnation=<span style="color: #2e8b57; font-weight: bold;">0</span><span style="color: #66cc66;">&#41;</span>;
    partition fraction<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">validate</span>=<span style="color: #2e8b57; font-weight: bold;">0.15</span> test=<span style="color: #2e8b57; font-weight: bold;">0.15</span> seed=<span style="color: #2e8b57; font-weight: bold;">42</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    autotune 
        objective=auc 
        searchmethod=bayesian 
        targetevent=<span style="color: #a020f0;">'1'</span>
        popsize=<span style="color: #2e8b57; font-weight: bold;">5</span>
        historytable=higgs_low_level_history
        tuningparameters = <span style="color: #66cc66;">&#40;</span>
             ntrees<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">300</span><span style="color: #66cc66;">&#41;</span> 
             maxdepth<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">30</span><span style="color: #66cc66;">&#41;</span>
             learningrate<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">0.1</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#41;</span>
    ;
&nbsp;
    target signal / level=nominal;
    <span style="color: #0000ff;">input</span> <span style="color: #0000ff;">_NUMERIC_</span>;
&nbsp;
    <span style="color: #0000ff;">output</span> out=low_level_preds role;
<span style="color: #000080; font-weight: bold;">run</span>;</pre></td></tr></table></div>

<p>That’s a grand total of 38 lines, including some extra whitespace for readability. In those 38 lines, we:</p>
<ul>
<li>Define where our file is and how to unpack with unzip and gunzip:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #0000ff;">filename</span> inpipe pipe <span style="color: #a020f0;">&quot;unzip -p /workspaces/myfolder/data/higgs.zip | gunzip -c&quot;</span>;</pre></td></tr></table></div>

</li>
</ul>
<ul>
<li>Define our column names and their order:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #0000ff;">%let</span> colnames = ...;</pre></td></tr></table></div>

</li>
</ul>
<ul>
<li>Unzip, untar, and read in the data:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;"><span style="color: #000080; font-weight: bold;">data</span> higgs;
    <span style="color: #0000ff;">infile</span> inpipe dlm=<span style="color: #a020f0;">','</span> dsd;
    <span style="color: #0000ff;">input</span> <span style="color: #0000ff; font-weight: bold;">&amp;colnames</span>;
    <span style="color: #0000ff;">drop</span> m_:;
<span style="color: #000080; font-weight: bold;">run</span>;</pre></td></tr></table></div>

</li>
</ul>
<p>Then, <strong>in one gradient boosting procedure</strong>:</p>
<ul>
<li>Perform a repeatable train/validate/test split:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">partition fraction<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">validate</span>=<span style="color: #2e8b57; font-weight: bold;">0.15</span> test=<span style="color: #2e8b57; font-weight: bold;">0.15</span> seed=<span style="color: #2e8b57; font-weight: bold;">42</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

</li>
<li>Enable autotuning:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">autotune</pre></td></tr></table></div>

</li>
<li>Set our autotuning objective, search method, and target event:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">objective=auc
searchmethod=bayesian
targetevent=<span style="color: #a020f0;">'1'</span></pre></td></tr></table></div>

</li>
<li>Create 4 parallel evaluations, with 5 iterations and 5 evaluations per iteration:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">popsize=<span style="color: #2e8b57; font-weight: bold;">5</span></pre></td></tr></table></div>

</li>
<li>Save the best model, autotuning history, predictions, and tag the role of each prediction:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">outmodel=low_level_model 
historytable=higgs_low_level_history 
<span style="color: #0000ff;">output</span> out=low_level_preds role</pre></td></tr></table></div>

</li>
<li>Set a few hyperparameter bounds to try because we learned last time that more trees, lower depth, and a lower learning rate are important with this data:

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">tuningparameters = <span style="color: #66cc66;">&#40;</span>
    ntrees<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">300</span><span style="color: #66cc66;">&#41;</span> 
    maxdepth<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">30</span><span style="color: #66cc66;">&#41;</span>
    learningrate<span style="color: #66cc66;">&#40;</span>UB=<span style="color: #2e8b57; font-weight: bold;">0.1</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

</li>
</ul>
<p>Even though we changed the bounds of a few of our hyperparameters, we are still tuning the rest of the parameters as well. We just gave it some more suggestions.</p>
<p><a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbcasml/vwbcasml_introcom_sect004.htm">There are a ton of other autotuning options available</a>. We can go much further than this, including excluding hyperparameters from tuning, <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbcasml/vwbcasml_introcom_sect004.htm#vwbcasml.introcom.autotune_secondobjective">adding a second objective</a>, setting a maximum time, using k-fold cross validation, setting a stagnation threshold, and much more.</p>
<p>Not only that, but PROC GRADBOOST handles both classification and regression in only one PROC. You simply tell it what type of target you have, and it sorts out the rest. You’ll find this to be the case for the rest of the machine learning PROCs too, such as <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbcasml/vwbcasml_nnet_toc.htm">Deep Neural Networks</a> and <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbcasml/vwbcasml_svmachine_toc.htm">Support Vector Machines</a>. This simplifies the world of models you need to know.</p>
<p>Let’s run this model and see how it compares.</p>
<h2>The results</h2>
<p>How did we do this time around? Using the SAS autotuning framework, <strong>we achieved a test AUC of 0.801 for the low-level model</strong>. Let’s put this into perspective with the rest of the models we were against, including our previous SAS model that was tuned with Optuna.</p>
<table width="690">
<tbody>
<tr>
<td width="400"><strong>Model</strong></td>
<td width="168"><strong>AUC: Low-level</strong></td>
<td width="168"><strong>Δ vs SAS (%)</strong></td>
</tr>
<tr>
<td width="400"><strong>SAS: Tuned Gradient Boosting</strong></td>
<td width="168"><strong>0.801</strong></td>
<td width="168"><strong> </strong></td>
</tr>
<tr>
<td width="400"><strong>SAS: Tuned Gradient Boosting (Optuna)</strong></td>
<td width="168"><strong>0.795 </strong></td>
<td width="168"><strong>-0.75%</strong></td>
</tr>
<tr>
<td width="400">Paper: Boosted Decision Tree</td>
<td width="168">0.73</td>
<td width="168"><strong>-8.9%</strong></td>
</tr>
<tr>
<td width="400">Paper: Shallow Neural Network</td>
<td width="168">0.733</td>
<td width="168"><strong>-8.5%</strong></td>
</tr>
<tr>
<td width="400">Paper: Deep Neural Network</td>
<td width="168">0.880</td>
<td width="168"><strong>+9.9%</strong></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Here’s what all the evaluations looked like:</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2025/12/tunedmodel.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-54945" src="https://blogs.sas.com/content/sgf/files/2025/12/tunedmodel.png" alt="" width="500" height="368" srcset="https://blogs.sas.com/content/sgf/files/2025/12/tunedmodel.png 640w, https://blogs.sas.com/content/sgf/files/2025/12/tunedmodel-300x221.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></a></p>
<p>Overall, impressive results for how little code we needed, and we even got our best result just 9 evaluations in. This shows how well SAS has tuned its hyperparameter autotuning framework, looking at optimal combinations of hyperparameters to test without the end-user trying to find a good starting point for each one.</p>
<h2>Going bigger</h2>
<p>If you’re ready to scale out with huge data, you don’t need to learn a whole new language. Many SAS modeling procedures automatically change where the calculations happen, bringing massively parallel, multithreaded processing to your data without any extra effort on your part. All you need to do is load your data to CAS and change your input dataset, then SAS handles the rest.<br />
Don’t believe me? Give it a try yourself on SAS Viya with our first example using Iris:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">cas; caslib <span style="color: #0000ff;">_ALL_</span> assign;
&nbsp;
<span style="color: #000080; font-weight: bold;">data</span> casuser.iris;
    <span style="color: #0000ff;">set</span> sashelp.iris;
<span style="color: #000080; font-weight: bold;">run</span>;
&nbsp;
<span style="color: #000080; font-weight: bold;">proc gradboost</span> <span style="color: #000080; font-weight: bold;">data</span>=casuser.iris;
    autotune;
    target species / level=nominal;
    <span style="color: #0000ff;">input</span> <span style="color: #0000ff;">_NUMERIC_</span>;
<span style="color: #000080; font-weight: bold;">run</span>;</pre></td></tr></table></div>

<p>All we did was load the data into CAS and tell PROC GRADBOOST that our data is no longer on disk, but in CAS. Just like that, the processing is now massively parallel and ready to scale to your demands.</p>
<h2>Wrapping it up</h2>
<p>We went through two examples of using sasviya.ml’s GradientBoostingClassifier and PROC GRADBOOST, showing that you can get impressive results in either language. You may be wondering which one is better.</p>
<p>Want to know a secret?</p>
<p><em>They’re both using the exact same engine</em>.</p>
<p>sasviya.ml isn’t some watered down set of algorithms for Python data scientists. Far from it. This is the same <a href="https://blogs.sas.com/content/sascom/2025/06/19/sas-the-workhorse-of-the-ai-era/">high-performance, trusted, battle-tested math</a> that backs other SAS Viya machine learning models. The SAS Viya Python API is designed to be Pythonic and <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/v_001/vwbpygs/p018t2lxmjxl0un1k9c3vp0fgayi.htm">work with other open source packages</a>, letting you seamlessly integrate your favorite packages in the open source ecosystem, like Optuna, with virtually no learning curve.</p>
<p>The flexibility of SAS Viya Workbench gives you the option to run your models in multiple languages while using the same underlying engine. Whether you’re using Python or a PROC, you can be assured that you’re going to get the performance and results that you expect from SAS. The language you use, and <a href="https://blogs.sas.com/content/sgf/2025/04/18/from-slopes-to-stats/">how you mix them together</a>, is entirely up to you.</p>
<h2>Links</h2>
<ul>
<li>Previous article: <a href="https://blogs.sas.com/content/sgf/2025/06/13/boost-ml-accuracy-with-hyperparameter-tuning">Boost ML accuracy with hyperparameter tuning (with a fun twist)</a></li>
<li>Documentation: <a href="https://go.documentation.sas.com/doc/en/vdmmlcdc/v_032/vdmmladvug/n0qns21st1lscpn193aethl4zwi2.htm">Overview of Hyperparameter Autotuning in SAS Viya</a></li>
<li><a href="https://archive.ics.uci.edu/dataset/280/higgs">UC Irvine Machine Learning Repository - Higgs boson dataset</a></li>
</ul>
<h2>References</h2>
<ul>
<li>Whiteson, D. (2014). HIGGS [Dataset]. UCI Machine Learning Repository. <a href="https://doi.org/10.24432/C5V312">https://doi.org/10.24432/C5V312</a>. Licensed under <a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>.</li>
</ul>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2025/12/17/the-afterparty-hyperparameter-autotuning-revisited/">The afterparty: Hyperparameter autotuning revisited</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2025/12/tuning-150x150.png" />
	</item>
		<item>
		<title>Mapping data over images</title>
		<link>https://blogs.sas.com/content/sgf/2025/12/16/mapping-data-over-images/</link>
		
		<dc:creator><![CDATA[Danny Sprukulis]]></dc:creator>
		<pubDate>Tue, 16 Dec 2025 20:39:06 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[ArcGIS]]></category>
		<category><![CDATA[Geo Map]]></category>
		<category><![CDATA[SAS Visual Analytics]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/sgf/?p=54783</guid>

					<description><![CDATA[<p>Mapping in SAS Viya gives the user plenty of options for maps to use. Signing in to ESRI on SAS Viya gives us many more. But what if the map that is needed is not available and is technically not a map at all? Well, not to worry, as there is [...]</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2025/12/16/mapping-data-over-images/">Mapping data over images</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></description>
										<content:encoded><![CDATA[<figure id="attachment_54792" aria-describedby="caption-attachment-54792" style="width: 300px" class="wp-caption alignright"><a href="https://blogs.sas.com/content/sgf/files/2025/12/map.jpg"><img loading="lazy" decoding="async" class="wp-image-54792 size-medium" src="https://blogs.sas.com/content/sgf/files/2025/12/map-300x207.jpg" alt="map with pin point" width="300" height="207" srcset="https://blogs.sas.com/content/sgf/files/2025/12/map-300x207.jpg 300w, https://blogs.sas.com/content/sgf/files/2025/12/map-768x531.jpg 768w, https://blogs.sas.com/content/sgf/files/2025/12/map.jpg 977w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-54792" class="wp-caption-text">Source: Getty Images</figcaption></figure>
<p>Mapping in SAS Viya gives the user plenty of options for maps to use. Signing in to ESRI on SAS Viya gives us many more. But what if the map that is needed is not available and is technically not a map at all? Well, not to worry, as there is a solution for that. Mapping on images is a lot like creating shapefiles on regular maps; the main difference is how that map is uploaded to SAS. This solution gives the user full control of what they would like to see in their reports and gives them full customizability for mapping visualizations.</p>
<p>The first step is having an ArcGIS Online account. This account needs to be set up with some credits to use as data storage currency so that the image the user uploads can be saved in the system storage. Once this step is complete, the user must also have a desktop version of ArcGIS Pro, where the maps can be built. Within the desktop application, the user must be connected to their ArcGIS Online account through the sign-in page to ensure everything is connected.</p>
<p>Now the user can begin the process. Once in ArcGIS Pro, a new project must be created. This will bring up a map of the world. In the contents pane, right-click <strong>Map</strong> and select <strong>Add Data</strong>. A box will pop up to browse the files, and the user can select the image they wish to use (Figure 1). For this example, the user will be using an image of a stadium.</p>
<figure id="attachment_54795" aria-describedby="caption-attachment-54795" style="width: 455px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-54795" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure1.png" alt="" width="455" height="303" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure1.png 516w, https://blogs.sas.com/content/sgf/files/2025/12/Figure1-300x200.png 300w" sizes="(max-width: 455px) 100vw, 455px" /><figcaption id="caption-attachment-54795" class="wp-caption-text">Figure 1: Selecting the image file in ArcGIS Pro</figcaption></figure>
<p>The image name will pop up below Map on the Contents pane, and a warning will say “Unknown Coordinate System”, which is fine since the user will be specifying their own coordinates for the image. To provide these coordinates, go to the Imagery tab at the top of the application, from there Imagery options should appear (Figure 2).</p>
<figure id="attachment_54798" aria-describedby="caption-attachment-54798" style="width: 338px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-54798 size-full" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure2.png" alt="" width="338" height="112" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure2.png 338w, https://blogs.sas.com/content/sgf/files/2025/12/Figure2-300x99.png 300w" sizes="(max-width: 338px) 100vw, 338px" /><figcaption id="caption-attachment-54798" class="wp-caption-text">Figure 2: Imagery tab</figcaption></figure>
<p style="text-align: left">Right-click on the image name in the contents pane. Select “<strong>Zoom to Layer</strong>” and the user will be brought to where the picture is on the map (without a coordinate system, the image should originate in the middle of the Atlantic Ocean). In the Imagery tab, select the “<strong>Geo Reference</strong>” option. Then the system will allow the user to begin geo-referencing the image. The user must now choose where they would like the image to appear on a map. The user must select the “<strong>Add Control Points</strong>” option in the ribbon. Then the user can select a point on the picture. Here, a notable corner on the image is selected (Figure 3).</p>
<figure id="attachment_54801" aria-describedby="caption-attachment-54801" style="width: 455px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-54801" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure3.png" alt="" width="455" height="282" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure3.png 936w, https://blogs.sas.com/content/sgf/files/2025/12/Figure3-300x186.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure3-768x476.png 768w" sizes="(max-width: 455px) 100vw, 455px" /><figcaption id="caption-attachment-54801" class="wp-caption-text">Figure 3: Selecting a source point on the map that can be easily identified on the base map</figcaption></figure>
<p>Once the initial point is selected, the user must then select a point on the map that this control point connects to (Figure 4).</p>
<figure id="attachment_54804" aria-describedby="caption-attachment-54804" style="width: 450px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure4.png"><img loading="lazy" decoding="async" class="wp-image-54804" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure4.png" alt="" width="450" height="223" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure4.png 492w, https://blogs.sas.com/content/sgf/files/2025/12/Figure4-300x149.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure4-164x82.png 164w" sizes="(max-width: 450px) 100vw, 450px" /></a><figcaption id="caption-attachment-54804" class="wp-caption-text">Figure 4: Select the identifiable point on a map for a target point</figcaption></figure>
<p>The image will now be placed over the point in its original orientation (Figure 5).</p>
<figure id="attachment_54807" aria-describedby="caption-attachment-54807" style="width: 455px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-54807" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-351x185.png" alt="" width="455" height="302" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure5-300x199.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure5-768x510.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure5.png 936w" sizes="(max-width: 455px) 100vw, 455px" /><figcaption id="caption-attachment-54807" class="wp-caption-text">Figure 5: The image is now connecting the target and source points. The image is still in its upwards position since it will default to that position when not enough control points are active.</figcaption></figure>
<p>The user must add another control point to get the image to follow the proper orientation of its place on a map. To add another control point, select the point on the image as a source point and then select another point on the map as a target point (Figure 6).</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure6.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-54810 size-medium" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure6-300x292.png" alt="" width="300" height="292" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure6-300x292.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure6.png 514w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>The image should follow its proper orientation now, but further reference points may be needed to be exact. In my experience, 3-4 is the maximum number of points needed, as the image will start to have distortion and become less accurate.</p>
<p>The image is now mapped and needs to be saved. Right-click on the Map in the Contents pane and select <strong>Properties</strong>. Give the Map a name, then close the Properties tab. The new name should be reflected where the word "Map" used to be. Right-click the new map name and select “<strong>Edit Metadata</strong>”. The user should now give the Item a Title, some tags (brief descriptions of the map), and a summary. Select “<strong>Apply</strong>” in the ribbon and close the metadata page. The user can now upload this image to their ArcGIS Online account. Go to the <strong>Share</strong> tab and select <strong>Web Layer – Publish Web Layer</strong> (Figure 7).</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-54813" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure7.png" alt="" width="392" height="274" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure7.png 392w, https://blogs.sas.com/content/sgf/files/2025/12/Figure7-300x210.png 300w" sizes="(max-width: 392px) 100vw, 392px" /></p>
<p style="text-align: center"><em>Figure 7: Publish Web Layer location</em></p>
<p>A share page will pop up. Select <strong>Layer Type</strong> to be <strong>Tile</strong> and <strong>Share with Everyone</strong>. Then select <strong>Publish</strong>. The image will now be uploaded to the ArcGIS Online account.</p>
<p>In ArcGIS Online, go to the <strong>My Content page</strong>. Find the name of the map that was just created, and the file should say “<strong>Tile Layer (hosted)</strong>”. Select the map, and an overview of the map will pop up. Go to <strong>Settings</strong> and scroll to <strong>Tile Layer (hosted)</strong>. This is where the user chooses how detailed the image will be on the map's scale. In Figure 8, <strong>World to Country</strong> is the default, but depending on the size of the image, the user should change the dropdown from <strong>Country</strong>. For instance, if it is a map of a building, then go to the size of a small building; if it is a large park select the option that is closest to that size.</p>
<p style="text-align: center"><img loading="lazy" decoding="async" class="aligncenter wp-image-54816 " src="https://blogs.sas.com/content/sgf/files/2025/12/Figure8.png" alt="" width="539" height="195" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure8.png 936w, https://blogs.sas.com/content/sgf/files/2025/12/Figure8-300x108.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure8-768x277.png 768w" sizes="(max-width: 539px) 100vw, 539px" /><em style="font-size: 14px">Figure 8: Selecting the Visible Range for the image, depending on the size of the image, the user can change how far out it can be seen from viewing the map</em></p>
<p>Next, do not select <strong>Build Tiles</strong>. First, select <strong>Save</strong> below the visible range selector (Figure 9).</p>
<p style="text-align: center"><img loading="lazy" decoding="async" class="aligncenter wp-image-54819 " src="https://blogs.sas.com/content/sgf/files/2025/12/Figure9.png" alt="" width="551" height="317" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure9.png 750w, https://blogs.sas.com/content/sgf/files/2025/12/Figure9-300x173.png 300w" sizes="(max-width: 551px) 100vw, 551px" /><em style="font-size: 14px">Figure 9: Saving the tile</em></p>
<p>Once saved, select <strong>Build Tiles</strong>. The tile screen will appear, and once it has finished uploading, select <strong>Create Tiles</strong> (Figure 10).</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure10.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-54822 " src="https://blogs.sas.com/content/sgf/files/2025/12/Figure10.png" alt="" width="468" height="333" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure10.png 620w, https://blogs.sas.com/content/sgf/files/2025/12/Figure10-300x214.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure10-269x192.png 269w" sizes="(max-width: 468px) 100vw, 468px" /></a></p>
<p style="text-align: center"><em>Figure 10: Creating the tiles</em></p>
<p>From there, our tile/image is uploaded to the ArcGIS cloud. To use this in SAS Viya, go into <strong>SAS Viya Explore and Visualize</strong>. The user must be signed into their ArcGIS Online account from there. If they are not, they can go to their user icon while in Explore and Visualize, select <strong>Settings</strong>, and select <strong>Geographic Mapping</strong>, and sign in there. Once signed in, bring a map into the Explore and Visualize workspace. This can be any of the maps in the <strong>Objects</strong> tab. In the options on the right-hand side, select <strong>Maps</strong> (Figure 11).</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure11.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-54825 size-medium" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure11-300x127.png" alt="" width="300" height="127" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure11-300x127.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure11.png 464w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: center"><em>Figure 11: Choosing a map, it will default an Automatic map</em></p>
<p>The user’s maps will show up under <strong>User Tiles</strong> here. Select the file folder icon and a list of mapping options become available to the user (Figure 12). Since the user created a tile in ArcGIS Online, the image will be in that folder.</p>
<p><a href="https://blogs.sas.com/content/sgf/files/2025/12/Figure12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-54828 size-medium" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure12-300x110.png" alt="" width="300" height="110" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure12-300x110.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure12-768x282.png 768w, https://blogs.sas.com/content/sgf/files/2025/12/Figure12.png 778w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: center"><em>Figure 12: All mapping folders available. The ArcGIS.com folders only appear if the user is signed into their ArcGIS Online account in Viya</em></p>
<p>When the image is selected, it will populate within the map. Depending on the <strong>Visual Range</strong> selected in Figure 10, the user may need to zoom to the proper level to see the map. These maps can have shapefiles overlap the image as well. I have added shapefiles to each of the sections of the stadium, so the map is more interactive with data (Figure 13).</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-54831 " src="https://blogs.sas.com/content/sgf/files/2025/12/Figure13.png" alt="" width="567" height="343" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure13.png 936w, https://blogs.sas.com/content/sgf/files/2025/12/Figure13-300x181.png 300w, https://blogs.sas.com/content/sgf/files/2025/12/Figure13-768x464.png 768w" sizes="(max-width: 567px) 100vw, 567px" /></p>
<p style="text-align: center"><em>Figure 13: The final map result in Visual Analytics using a geo-region map</em></p>
<p>Another example of the image mapping is in Figure 14, with mapped body sections over a diagram of the human body.</p>
<p style="text-align: center"><img loading="lazy" decoding="async" class="aligncenter wp-image-54834" src="https://blogs.sas.com/content/sgf/files/2025/12/Figure14.png" alt="" width="522" height="320" srcset="https://blogs.sas.com/content/sgf/files/2025/12/Figure14.png 702w, https://blogs.sas.com/content/sgf/files/2025/12/Figure14-300x184.png 300w" sizes="(max-width: 522px) 100vw, 522px" /><em style="font-size: 14px;text-align: center">Figure 14: An image of the human body being mapped with custom shapefiles of body sections.</em></p>
<p>This is how the user can map over top of images. It allows them to customize their mapping interface for full freedom in their report visualizations.</p>
<p><a rel="nofollow" href="https://blogs.sas.com/content/sgf/2025/12/16/mapping-data-over-images/">Mapping data over images</a> was published on <a rel="nofollow" href="https://blogs.sas.com/content/sgf">SAS Users</a>.</p>
]]></content:encoded>
					
		
		
			<enclosure url="https://blogs.sas.com/content/sgf/files/2025/12/map-150x150.jpg" />
	</item>
	</channel>
</rss>
