Data-Driven Design in SAS® and Python: Developing More Dynamic, Flexible, Configurable Software
Presented: Friday September 6, 2019, 1:30 p.m.-5:00 p.m.
Troy Martin Hughes has been a SAS practitioner for more than 20 years, has managed SAS projects in support of federal, state, and local government initiatives, and is a SAS Certified Advanced Programmer, SAS Certified Base Programmer, SAS Certified Clinical Trials Programmer, and SAS Professional V8. Since 2013, he has given dozens of presentations, trainings, and hands-on workshops at SAS conferences, including at SAS Global Forum, SAS Analytics Experience, WUSS, SCSUG, SESUG, MWSUG, and PharmaSUG. He has authored two groundbreaking books that
model software design and development best practices:
- SAS Data Analytic Development: Dimensions of Software Quality (2016)
- SAS Data-Driven Development: From Abstract Design to Dynamic Functionality (2019)
Troy has an MBA in information systems management as well as other credentials, including: PMP, PMI-RMP, PMI-PBA, PMI-ACP, CISSP, CSSLP, ITIL, CSM, CSD, CSPO, CSP-SM, and CSP-PO. He is a US Navy veteran with two tours of duty in Afghanistan.
Students will receive a complimentary copy of the author’s 2019 book SAS® Data-Driven Development: From Abstract Design to Dynamic Functionality, a $40 value! The course follows the book’s outline and teaches data-driven design techniques in which software configuration, business rules, data models, data leaning/validation,
report style, and other dynamic elements are maintained in external data structures – NOT in the underlying code. Data-driven development techniques allow software to adapt flexibly to various organizations, environments, and objectives. This design facilitates highly configurable (i.e., “codeless”) software whose functionality can be modified by changing only the underlying control data – the control tables, configuration files, parameters/arguments, and user-specified options rather than the code itself.
All examples are demonstrated in the SAS language, with some examples repeated in Python 3.7 to demonstrate the interoperability of both built-in and user-defined data structures. All students will walk away with an understanding of how data-driven design maximizes software flexibility while minimizing software maintenance and modification, as well as proven data-driven development techniques that can be immediately implemented.
In the first half of the course, students will learn data-driven design pillars, principles, and components – high-level concepts that can be universally applied across programming languages:
- Compare data-driven software design with functionally equivalent code-driven design.
- Differentiate domain data from control data (i.e., data used to drive software functionality).
- Introduce the data-driven design pillars of abstraction, software modularity, and data independence, and demonstrate procedural abstraction, data abstraction, and iteration abstraction.
- Contrast call-by-reference and call-by-value methods, as well as keyword and positional parameterization, and demonstrate the pros and cons of each method.
- Demonstrate various built-in and user-defined data structures that can be used to maintain control data (e.g., parameters/arguments, macro lists, arrays, control tables, hierarchical data models, and configuration files).
- Create and read various control data file formats (e.g., Excel spreadsheets, CSV files, SAS data sets, XML files, and CSS files).
In the second half of the course, students will use data-driven design methods to solve real-world problems:
- Use SAS-specific components that support data-driven development, including CALL EXECUTE, CNTLIN statement in PROC FORMAT, SYSPARM option, SAS dictionary tables, SAS arrays, and CSSSTYLE option in PROC REPORT.
- Differentiate and build user-defined procedures, functions, and call routines using both SAS macros (including PARMBUFF option) and FCMP procedure (including array processing and VARARGS option).
- Use Python-specific components that support data-driven development, including Python lists, arrays, dictionaries, and Pandas DataFrames.
- Clean, standardize, and categorize data using dynamic data formats and hierarchical data models.
- Create quality control exception reports that use dynamic data dictionaries to identify erroneous data.
- Transform data using dynamic business rules and conditional logic maintained in data structures rather than code.
- Configure the style (e.g., format, font, color scheme, graphics) of data products, using user-defined data mappings (e.g., SAS formats) and CSS files.