Warning
02SEP2025: Steps listed as (DEPRECATED) will be removed soon.
The list of available Custom Steps further down on this page uses the following abbreviations to group related steps.
| Abbreviation | Explanation |
|---|---|
| CAS | Steps in this category provide utilities for working with data in CAS |
| Catalog | SAS Information Catalog related |
| CV | Computer Vision |
| Data Maker | SAS Data Maker related |
| DQ | Data Quality |
| DuckDB | DuckDB related |
| EAC | External API Connection |
| Glosssary | Glossary related - a component of SAS Information Catalog |
| LLM | Large Language Model |
| NLP | Natural Language Processing |
| OCR | Optical Character Recognition |
| SAAM | SAS Applied Agents & Models related |
| SDG | Synthetic Data Generation |
| SID | SAS Intelligent Decisioning related |
| VA | SAS Visual Analytics related |
| Name | Brief Description | Contributor/Contact | Viya Version Supported | Last Update |
|---|---|---|---|---|
| _template | Template to use for contributions | SAS | 2020.1.5 or later |
04OCT2024 |
| Airflow - Generate DAG | Generates an Apache Airflow DAG using SAS Studio Flow where flow steps represent Airflow tasks using the SAS Airflow Provider | Nicolas Robert / apsaros | 2023.12 or later |
25JUL2025 |
| Anonymize and Mask Data | Anonymize and Mask Data using QKB definitions (*) | Mary Kathryn Queen | 2023.06 or later |
19FEB2024 |
| Append Table | Appends data to a target table with support for maintaining unique incremental id | Torben Juul Johansson | 2020.1.5 or later |
26OCT2022 |
| CAS - Convert Char to Varchar | Create a copy of a table and convert chars to varchars | Carlo Petti | 2023.01 or later |
05SEP2023 |
| CAS - Generate unique ID | Generates a new column containing a unique identifier (ID) per observation for a given input CAS table | Sundaresh Sankaran | 2022.11 or later |
07FEB2023 |
| CAS - Load to CAS | Load CAS table, with support for Append/Compress/Promote and other options | Remco Gooijer | 2025.12.01 or later |
11FEB2026 |
| CAS - Load Tables from Folders in Filesystem | Load all files in a directory to CAS tables | Sundaresh Sankaran / Wilbram Hazejager | 2022.11 or later |
21DEC2022 |
| CAS - Submit Python and R code | Submit Python/R code to CAS server using CAS Gateway action | David Weik | 2023.11 or later |
05MAY2025 |
| CAS - Validate unique ID | Validates if column contains unique values for a given input CAS table | Sundaresh Sankaran | 2023.06 or later |
11JUL2023 |
| Catalog - List Agents | Extract list of configured SAS Information Catalog agents into a table | David Weik | 2023.12 or later |
15JAN2024 |
| Catalog - Run Agent | Triggers the run of a SAS Information Catalog agent) | David Weik | 2023.12 or later |
15JAN2024 |
| Create Listing Of Directory CLOD | Create table containing names of all files in directory | Stephan Weigandt | 2020.1.5 or later |
25SEP2024 |
| CV - Create Object Detection Table | Create CAS table (training dataset) with images and labels for use with CAS actions for Computer Vision (CV) and for use with SAS DLPy Python library | Neela Vengateshwaran | 2024.01 or later |
21JUL2024 |
| CV - Display Images | Display images in a CAS image table | Neela Vengateshwaran | 2024.01 or later |
06AUG2024 |
| CV - ESP ZIP Creation | Creates a zip file to automate the creation of Event Stream Processing (ESP) projects | Robert W Blanchard / Rik de Ruiter | 2024.05 or later |
03DEC2024 |
| CV - Load Images | Load image files into a CAS table for use with CAS image analytics actions | Robert W Blanchard | 2024.05 or later |
04OCT2024 |
| CV - Merge Data with Images | Merge or append data that contains images | Robert W Blanchard | 2024.05 or later |
19SEP2024 |
| CV - Train Models | Develop Computer Vision (CV) models to accomplish one of four prediction tasks: 1. Image classification, 2. Image regression, 3. Object detection, 4. Multi-task | Robert W Blanchard | 2024.05 or later |
19SEP2024 |
| Data Maker - Analyse Data | Analyse parquet files to help drive data configuration decisions in SAS Data Maker | Sundaresh Sankaran | 2025.07 or later |
23JAN2026 |
| Data Synthesis with Python faker | Generate synthetic data using Python faker module (also includes custom steps to install/load Python modules) | Angus Looney / Duncan Bain | 2021.1.1 or later |
22DEC2022 |
| Detect Data Drift | Calculate metrics for tracking changes between two groups of records (representing two time intervals) inside a table | David Weik | 2024.07 or later |
15AUG2024 |
| Download Job Execution Log | Store Job Execution Log in a user-specified location on SAS Compute Server file system | Remco Gooijer | 2024.01 or later |
03NOV2024 |
| DQ - Cluster Analysis | Compare pairs of rows in a cluster and identify potential false positives | Clemens Knobloch | 2023.10 or later |
23JAN2024 |
| DQ - Change Case | Upper-, Lower-, or Propercase data values using QKB locale specific rules (*) | Clemens Knobloch | 2023.01 or later |
15MAR2023 |
| DQ - Clustering | Cluster records based on column values, eg. match codes | Lorenzo Toja / Arnold Toporowski / Nikolaus Hartung | 2021.1.1 or later |
05AUG2024 |
| DQ - Create QKB Reference Tables | Create QKB Reference Tables | Mary Kathryn Queen | 2023.06 or later |
10OCT2023 |
| DQ - Identify | Obtain the Identity Type for of data values using the dqIdentify function (*) | Arnold Toporowski | 2021.1.1 or later |
29NOV2022 |
| DQ - Match Code | Create Match Codes based on locale, using SAS QKB and dqMatch function (*) | Lorenzo Toja / Arnold Toporowski | 2021.1.1 or later |
19MAR2024 |
| DQ - Parsing | Parse a string into a set of tokens using QKB locale specific rules (*) | Clemens Knobloch | 2023.01 or later |
15MAR2023 |
| DQ - Standardize | Create standardized values based on locale, using SAS QKB and dqStandardize function (includes support for generating masked values) (*) | Lorenzo Toja / Arnold Toporowski | 2024.01 or later |
21MAR2024 |
| DQ - Surviving Record | Extract the best record (aka. Golden Record) from clusters of records, with support for standard deduplication routines and user-defined rules | Lorenzo Toja | 2023.06 or later |
24AUG2023 |
| DuckDB - Aggregate Parquets | Aggregate Parquet files using SAS/Access interface to DuckDB | Sundaresh Sankaran | 2025.07 or later |
03FEB2026 |
| DuckDB - Execute DuckDB SQL | Uses proc python and DuckDB libraries to read and write data in various DBMS and file types | Clemens Knobloch | 2025.12 or later |
16JAN2026 |
| DuckDB - Extract Parquet Metadata | Extract Parquet Metadata for reporting and allow copying Parquet file and applying partitioning using DuckDB | Sundaresh Sankaran | 2026.01 or later |
19FEB2026 |
| Dynamic Aggregations From Timeseries DAFT | Perform dynamic aggregations on timeseries data | Stephan Weigandt | 2022.1.2 or later |
08MAY2023 |
| EAC - Get Exchange Rates | Get Exchange Rates from Service Provider | David Weik | 2023.08 or later |
03JAN2025 |
| EAC - Query SAS Viya REST API | Query SAS Viya applications and services through SAS Viya REST API | Charlie Vismara | 2024.12 or later |
07FEB2025 |
| EAC - Translate Text | Translates text stored in a column using DeepL API | David Weik | 2023.04 or later |
03JAN2025 |
| Export - ADLS File Writer | Write SAS tables to Parquet files on Azure Data Lake Storage (ADLS) | Alfredo Lorie | 2023.02 or later |
20APR2023 |
| Export - GCSFS File Writer | Write SAS and CAS datasets to Google Cloud Storage (GCS) in Parquet and Delta Lake format using Python | Ignacio Rodríguez | 2023.11 or later |
21DEC2023 |
| Export - Parquet | Export SAS tables to Parquet files using SAS Libname engine | Neil Griffin | 2023.10 or later |
15DEC2023 |
| Extract Job Definition Metadata | Extract all content (SAS Code, HTML forms, XML Prompts and Parameters) from a SAS Job Definition and store it in files | David Weik | 2023.11 or later |
23NOV2023 |
| Extract Text Features | Supports extracting many different features from text fields | David Weik / Ulrich Reincke / Rens Feenstra | 2022.10 or later |
27NOV2022 |
| Fork (Fork Run and Fork Wait)g | Run one or more concurrent processes and, optionally, wait for all these processes to finish before continuing with the next step in the Studio Flow | Remco Gooijer | 2025.04 or later |
25JUN2025 |
| FTP Directory Listing | Create a table containing names of files in an FTP directory | Remco Gooijer | 2023.01 or later |
14AUG2024 |
| FTP Download Files | Download file from an FTP Server, where list of files to download is provided in an input table | Remco Gooijer | 2023.01 or later |
14AUG2024 |
| GEO - Shape Files | Manage Shape Files used in GIS systems for use in SAS Visual Analytics | Stefano Tucciarone | 2023.10 or later |
18APR2024 |
| GeoDistance with Rounding | Calculate the distance between 2 supplied lat/long locations in either kilometers or miles | Mary Kathryn Queen | 2020.1.5 or later |
28SEP2022 |
| Get SAS Job Definition Information | Lists all SAS Job Definitions into three output tables | David Weik | 2025.12 or later |
12JAN2026 |
| Git - Clone Git Repo | Clone Git Repo as part of running a flow | Sundaresh Sankaran | 2022.11 or later |
25JAN2023 |
| Git - Delete Local Repo | Delete LOCAL Repo as part of running a flow | Sundaresh Sankaran | 2022.11 or later |
25JAN2023 |
| Git - List Local Repo Changes | List changed files inside local Git repository folder into a dataset as part of running a flow for easy reporting | Sundaresh Sankaran | 2022.11 or later |
07FEB2023 |
| Git - Stage, Commit, Pull and Push Changes | Perform stage, commit, pull and push changes as part of running a flow | David Weik | 2023.01 or later |
19FEB2023 |
| Glossary - Get Term Types | Extract attributes of Terms Types from Glossary into 3 output tables | Remco Gooijer | 2025.08 or later |
04FEB2026 |
| Glossary - Get Terms by Term Type(s) | Extract attributes of Terms for selected Term Type into 2 output tables | Remco Gooijer | 2025.08 or later |
04FEB2026 |
| Great Expectations - Execute Rule | Run business rules based on Great Expectations Python package | Stephen Kotiang | 2023.03 or later |
11OCT2023 |
| Great Expectations - Generate Expectation Suite | Generate rules on input data using Great Expectations | Mackenzie Looney | 2023.04 or later |
14FEB2025 |
| Great Expectations - Run Expectations Suite | Compare data against an Expectation Suite | Mackenzie Looney | 2023.04 or later |
19OCT2023 |
| HTTP Request | Send HTTP requests using proc HTTP and use URL parameter values from input table | Clemens Knobloch | 2024.06 or later |
21NOV2024 |
| Import - ADLS File Reader | Read Parquet files from Azure Data Lake Storage (ADLS) with support for Delta Lake file format | Alfredo Lorie | 2023.02 or later |
25APR2023 |
| Import - CSV with long column names | Import CSV file with long column names (>32 chars) in header row | Ignacio Rodríguez | 2023.11 or later |
15JAN2024 |
| Import - Data Ingestion Auto Pilot DIAP (Light) for External Files | Ingest external file(s) from directory with push of a button | Stephan Weigandt | 2020.1.5 or later |
04OCT2024 |
| Import - Extract Table from PDF | Extract tabular data from within a PDF document and load the same to a SAS dataset | Sundaresh Sankaran / Dragos Coles | 2023.03 or later |
01MAY2023 |
| Import - GCSFS File Reader | Read Parquet and Delta Lake files from Google Cloud Storage (GCS) and write to SAS and CAS datasets using Python | Ignacio Rodríguez | 2023.11 or later |
21DEC2023 |
| Import - Google Sheets | Import public Google Sheets as a SAS data set | David Weik | 2022.12 or later |
12JAN2023 |
| Import - HTML Table | Import HTML table(s) from web page as SAS data set(s) using Python Pandas | David Weik | 2023.07 or later |
28JUL2023 |
| LLM - Azure OpenAI In-context Learning | Interact with a Large Language Model (LLM) using Azure OpenAI service to process simple instructions on specified input data using a technique called zero-shot prompting | Crystal Baker / Sundaresh Sankaran | 2025.02 or later |
25MAR2025 |
| LLM - Azure OpenAI RAG | Uses a Retrieval Augmented Generation (RAG) approach to provide right context to an Azure OpenAI Large Language Model (LLM) for purposes of answering a question | Samiul Haque / Sundaresh Sankaran | 2024.01 or later |
15NOV2024 |
| LLM - Custom Step Generator with Azure OpenAI | Generate SAS Studio Custom Step using Azure OpenAI | Bogdan Teleuca | 2024.09 or later |
23JUL2025 |
| LLM - Document SAS Studio Flows with Azure OpenAI | Uses OpenAI to generate documentation for SAS Studio flows | Bogdan Teleuca | 2025.01 or later |
23JUL2025 |
| LLM - Prompt Catalog | Submit queries to a Large Language Model, test prompts (prompt engineering) and save prompt history | Xin Ru Lee | 2023.12 or later |
24JUL2024 |
| Log File Scraper | Extract ERRORS and WARNINGS from one or more SAS log files and makes them available in a table | Remco Gooijer | 2021.1.5 or later |
08NOV2024 |
| Lookup | Add column by performing lookup on other table (using data step hash object) | Torben Juul Johansson | 2021.2.1 or later |
21SEP2022 |
| Loop Deployed Object | Parallel execution of a deployed flow or a SAS program for a given set of parameter values | Remco Gooijer | 2025.06 or later |
08OCT2025 |
| Loop Flow | Iteratively execute another Studio Flow, much like Loop/Loop End in SAS Data Integration Studio | Torben Juul Johansson | 2023.09 or later |
08MAR2024 |
| NLP - Categories Testing Framework | Test and assess SAS Visual Text Analytics categorization model | Sundaresh Sankaran | 2023.12 or later |
10JAN2024 |
| NLP - Extract Identities | Pull entities out of documents or freeform text | Arnold Toporowski | 2022.12 or later |
13DEC2023 |
| NLP - Extract Rule Configuration | Extracts the rule configuration within rules-based Visual Text Analytics Concepts or Categories model definitions for use in downstream applications. | Sundaresh Sankaran | 2023.04 or later |
01AUG2023 |
| NLP - Identify Language | Identifies the language used for text data in an input table and create a column containing the ISO 639-1 language code. | Sundaresh Sankaran | 2022.12 or later |
15FEB2023 |
| NLP - Predefined Sentiment Analysis | analyse a text corpus for the sentiment expressed in it | Sundaresh Sankaran | 2023.03 or later |
04APR2023 |
| NLP - Profile Text | Profile text within a document corpus and understand its linguistic structure | Sundaresh Sankaran | 2022.07 or later |
19OCT2022 |
| NLP - Score Text Classifier | Score a text corpus with a text classifier model trained using the deep learning (BERT-based) textClassifier.trainTextClassifier CAS action | Sundaresh Sankaran | 2023.02 or later |
19MAR2023 |
| NLP - Sentence Splitter | Splits a text column into multiple observations with constituent sentences using CAS actions | Sundaresh Sankaran | 2023.08 or later |
03NOV2023 |
| NLP - Train Text Classifier | Train a text classifier model based on deep learning (BERT-based transformer) architecture using textClassifier.trainTextClassifier CAS action (supports GPUs) | Sundaresh Sankaran | 2023.02 or later |
18MAR2023 |
| Nominal Dimensionality Reduction | dimensionality reduction on nominal variables using SAS's PROC NOMINALDR | Sundaresh Sankaran | 2025.05 or later |
08JAN2026 |
| OCR - AWS Textract | Use the AWS Textract service to perform different types of OCR on files that can be stored in S3 buckets or on the SAS Compute file system | Jannic Horst | 2022.09 or later |
08JAN2024 |
| OCR - Azure AI Document Intelligence | Uses Microsoft Azure's Document Intelligence service to perform different types of OCR for files stored in the SAS Server file system or stored on a URL. | Sundaresh Sankaran / Jannic Horst | 2024.02 or later |
22MAR2024 |
| OCR - Document Analysis - Execute Batch OCR Process | Uses SAS Document Analysis to perform a batch run on files stored in the SAS Server file system. | William Nadolski | 2025.10 or later |
04NOV025 |
| OCR - Document Analysis - Produce Usage Report Output | Uses SAS Document Analysis to to generate a usage report on previous batch processes. | William Nadolski | 2024.08 or later |
29OCT2024 |
| Python - Create a Virtual Environment | Create a virtual Python environments for use within SAS Viya | Sundaresh Sankaran | 2025.07 or later |
01SEP2025 |
| Python - Generate Requirements | Generate a requirements.txt file for your Python project or environment |
Sundaresh Sankaran | 2025.07 or later |
01SEP2025 |
| Python - Load Objects to SAS | Load Python objects to SAS Compute or CAS tables | Sundaresh Sankaran | 2023.08 or later |
01SEP2022 |
| Python - Switch Environments | Switch between different Python environments or revert to the original environment for use within SAS Viya | Sundaresh Sankaran | 2025.07 or later |
29AUG2025 |
| Python - Virtual Environments (DEPRECATED) | A collection of SAS Studio custom steps which help you create, activate, and switch between virtual Python environments for use within SAS Viya. (DEPRECATED) | Sundaresh Sankaran | 2020.1.5 or later |
12JUL2022 |
| R Runner | Submit R scripts with support for input and output table | Samiul Haque / Sundaresh Sankaran | 2023.08 or later |
18AUG2023 |
| Rank Columns - Starter template | Simple Example (based on template) | SAS | 2020.1.5 or later |
26AUG2022 |
| SAAM - Document Analysis for Health Records Review | Executes the SAS Document Analysis Health Records Review information extraction process | Murali Pagolu | 2025.12 or later |
28JAN2026 |
| SAS Content - Copy File from File System | Copy file from Compute file system into SAS Content folder programmatically | Sundaresh Sankaran | 2022.11 or later |
09JAN2024 |
| SAS Content - Create Folder | Creates a new folder in SAS Content programmatically | Sundaresh Sankaran | 2022.11 or later |
18DEC2023 |
| SAS Content - Obtain Folder URI | Obtain URI of selected SAS Content folder and save it in a global macro variable | Sundaresh Sankaran | 2022.11 or later |
18DEC2023 |
| SCD Loader | Slowly Changing Dimensions loader with support for type 1 and type 2 changes | Torben Juul Johansson | 2020.1.5 or later |
28SEP2022 |
| SDG - Generate Synthetic Data through GANs | Generate synthetic data using a trained GAN model | Sundaresh Sankaran | 2024.10 or later |
10DEC2024 |
| SDG - Generate Synthetic Data through SMOTE | Generate synthetic data based on an input table, using the Synthetic Minority Oversampling TEchnique (SMOTE). | Sundaresh Sankaran / Josiah Chua | 2024.10 or later |
11NOV2024 |
| SDG - Train a Synthetic Data Generator through GANs | A collection of 3 steps which help you train, score and assess Synthetic Data models | Sundaresh Sankaran | 2024.10 or later |
17FEB2025 |
| Send SMTP Email | Send Email message | Mary Kathryn Queen / Sundaresh Sankaran | 2022.1.4 or later |
07FEB2025 |
| Send Teams Message | Send Microsoft Teams Messages to a Teams channel | David Weik / Tamara Fischer | 2022.10 or later |
14JUN2023 |
| SID - Create Data Grid | Serialize source data into a data grid variable for use by SAS Intelligent Decisioning flows | Charlie Vismara | 2024.12 or later |
05FEB2025 |
| SID - Import Lookup Table | Import and activate a lookup table for SAS Intelligent Decisioning (SID) from input data | Charlie Vismara | 2024.12 or later |
07FEB2025 |
| Surrogate Key Generator | Generates a surrogate key based on a business key | Torben Juul Johansson | 2020.1.5 or later |
29SEP2022 |
| Update column labels | Update column labels from a (metadata) table, delimited file, or interactively | Ignacio Rodríguez | 2023.11 or later |
21DEC2023 |
| VA - Copy and Replace Report | The VA - Copy and Replace Report custom step enables SAS Studio users to take an existing SAS Visual Analytics report and either copy the report and keep the original data, or copy the report and replace the original data with a new data set | Mary Dolegowski | 2025.12 or later |
16FEB2026 |
| VA - Export Report | Exports a package for the report in a compressed (zip) format. The returned content contains the report source files, plus the results of data queries and image rendering, constituting all that is needed for remote viewing of the report | Remco Gooijer | 2025.08 or later |
21NOV2025 |
| VA - Extract Report Metadata | Extract info about CAS tables and columns used, calculated column definitions and their usage, across objects in VA report | Remco Gooijer | 2023.05 or later |
27AUG2025 |
| VA - Get Column Explanation | Get an explanation for a column in a CAS table using the /insights/explain endpoint that is provided by SAS Visual Analytics. | David Weik | 2025.08 or later |
25SEP2025 |
| VA - Get Report Content | Retrieve VA report definition and store it in a JSON file | David Weik | 2025.05 or later |
23AUG2025 |
| Vector Databases - Hydrate Chroma DB Collection | Populate a Chroma vector database collection with documents and embeddings contained in a CAS table | Sundaresh Sankaran | 2023.12 or later |
24JAN2024 |
| Vector Databases - Query Chroma Chroma DB Collection | Query a Chroma vector database collection with documents and store results in CAS table | Sundaresh Sankaran | 2023.12 or later |
30JAN2024 |
| Vector Search - Fast KNN | Identify nearest neighbors to observations in an input query table | Sundaresh Sankaran | 2023.11 or later |
09FEB2024 |
| Zip data | Move or copy files residing on the Compute file system to zip files using Python | Neil Griffin | 2024.05 or later |
25JUN2024 |
(*) This functionality (or part of it) is now also available as an out-of-the-box step in the Steps panel in SAS Studio and it is highly recommended to use that step going forward. The readme file for the step provides more details.