Jun 27, 2025, 8:15 AM – 5:00 PM EDT
Microsoft NERD, 1 Memorial Dr, Cambridge, MA 02142, USA
BASUG is thrilled to announce our IN-PERSON June Meeting + Training Class!
Pre-registration by June 24 is required. No on-site registration or walk-ins.
BASUG welcomes students with a 50% discount if they register by Friday, June 13. Please email an image of your current student ID to registrations@basug.org to request the coupon code.
Register today!: https://www.basug.org/event-details/basug-june-meeting-training-in-person
Code Hard and Put away Wet: Replacing Hardcoded SAS® Software Quality Checks with Data-Driven Design and Defensive Programming Techniques That Validate Code and Control Data
Troy Martin Hughes
You wouldn’t ride that pony hard and put her away wet, so why subject your SAS® software to the same ill treatment?! Defensive programming describes a risk management strategy that aims to identify threats to software functionality and/or performance before they occur and, where possible, to identify pathways to programmatically mitigate those risks (or to communicate realized threats to stakeholders). This talk introduces various defensive programming techniques that can be implemented before software executes, such as verifying SAS program file state (i.e., availability, accessibility) and program file metadata (e.g., filename, checksum, create date, version). Data-driven software design further espouses the reality that “software” comprises not only code but also the underlying control data that drive that code’s functionality and flexibility. Thus, defensive data-driven design requires a fuller risk management strategy that evaluates risks not only to code but also to control data, including lookup tables, control tables, configuration files, and other control files. Finally, although not considered to be “software,” domain data sets and other data sources can be no less essential to ensuring software success, so the state and quality of these transactional data can be evaluated as well. Given this more expansive view, this talk further demonstrates defensive programming techniques that evaluate the state and metadata of required input data, be they SAS data sets, spreadsheets, CSV files, XML, JSON, or other interoperable formats. Defensive programming methods should be implemented where robust software must execute reliably, and data-driven software should be designed to incorporate these best practices.
The (ODS) Output of Your Desires: Creating Designer Reports and Data Sets
Louise Hadden
SAS® procedures can convey an enormous amount of information – sometimes more information than is needed. Most SAS procedures generate ODS objects behind the scenes. SAS uses these objects with style templates that have custom buckets for certain types of output to produce the output that we see in all destinations (including the SAS listing). By tracing output objects and ODS templates using ODS TRACE (DOM) and by manipulating procedural output and ODS OUTPUT objects, we can pick and choose just the information that we want to see. We can then harness the power of SAS data management and reporting procedures to coalesce the information collected and present the information accurately and attractively.
Beyond Labels: Mastering PROC FORMAT for Dynamic, Scalable SAS Programming
Michael Salé
PROC FORMAT is one of SAS’s most powerful yet underrated tools, capable of transforming how you label, categorize, and analyze your data. This in-depth session will explore the full breadth of PROC FORMAT, from simple value-label mappings to advanced techniques like dynamic format creation using CNTLIN datasets and multi-label classification for overlapping categories. We'll dive into the use of PICTURE formats for elegant numeric and date display, discuss strategies for maintaining and sharing format catalogs, and examine performance and debugging tips to keep your code clean and efficient. Whether you're building a reusable reporting framework or customizing output for diverse audiences, this session will show you how mastering PROC FORMAT can bring clarity, consistency, and scalability to your SAS programs.
SAS “User-defined” functions are those functions that are created by SAS users, as contrasted with “built-in” functions that are part of out-of-the-box Base SAS functionality. SAS provides two methods to build user-defined functions, including the SAS macro language and the SAS Function Compiler (aka PROC FCMP). This introductory course demonstrates how to build user-defined functions (and subroutines)—including both macro functions and FCMP functions. No prior experience with the SAS macro language or PROC FCMP syntax is required.
User-defined functions improve software reusability—that is, the ability of code modules to be reused in future software projects, and to be reused by multiple SAS users within a team or organization. Reusability enables a function to be developed once but used repeatedly, which reduces the workload of the SAS users who are writing programs, by enabling us to rely on previously built (and fully tested) code modules. Thus, user-defined functions facilitate more flexible and configurable software, as well as a more productive, efficient team.
This lecture-style class (NOT hands on) provides an introduction to writing functions with both PROC FCMP and the SAS macro language.
Registration link: https://www.basug.org/event-details/basug-june-meeting-training-in-person
Thanks much @ShelleySessoms !