This document provides tips and best practices for highly effective SAS programmers. It discusses 5 habits: 1) using programming and QC standards, 2) effective communication, organization and documentation, 3) mastering SAS basics and continuous learning, 4) having a passion for excellence and an 'outsourced' mentality, and 5) following best practices. It emphasizes training, documentation, certification, effective macro use, and taking advantage of SAS resources to improve skills and productivity.
1 of 36
Downloaded 17 times
More Related Content
Habits of Effective SAS Programmers
1. 1
Five Habits of Highly Effective
SAS Programmers C Are Effective are You?
Sunil Gupta
Gupta Programming
SASSavvy.com
An invaluable resource for
ALL SAS Programmers
since 2011
2. Five Habits of Highly Effective SAS Programmers
1) Programming /
QC Standards
2) Communication /
Organization /
Documentation
3) Master the Basics /
Continuous Learning
4) Passion for
Excellence /
`Outsource¨ Mentality
5) Best
Practices
3. 1) Programming / QC Standards:
What makes a good novel/SAS program?
Good Novel Good SAS Program
Complete Introduction Program Header
Chapters make it easier to understand Program Sections
Paragraphs provide the details SAS Procedures
Storyline makes sense from one event to next event Logical Flow
Conclusion/Summary gives us closure Validated Dataset/Report
4. 4
The Power of Data Step Programming
See more SAS Mind Maps at SASSavvy.com
5. Master the Top Four SAS Procedures
with common options
Proc
SQL*
Proc
Freq /
Means
Proc
Report
Proc
Tabulate
* Because Proc SQL may generate incorrect results without any warnings, caution
should be used when writing complex or multi-tasking Proc SQL code.
SAS Graph
Procedures
Statistical
SAS
Procedures
6. 6
Hidden SAS Gem:
What is PROC TABULATE??
Proc Print Proc Freq
Proc Means
Proc
Summary
Proc Tabulate
Copyright (C) 2013, Sunil Gupta, SASSavvy.com
7. 7
Copyright (C) 2013, Sunil Gupta, SASSavvy.com
SASSavvy members can
access online Gallery
8. 8
proc tabulate data=class order=data missing format=5.1;
class sex/preloadfmt; var sex_cnt age height weight;
keylabel N='N' PCTN='%' COLPCTN='%' MEAN='Mean'
MEDIAN='Median' MIN='Min' MAX='Max' STD='Std'
Q1='Q1' Q3='Q3' ALL='Subtotal';
tables ( sex ), sex_cnt*(n colpctsum)/ rts=75 printmiss
misstext='0';
* For variable with unique values that create multiple
columns;
* tables ( sex ), (&colvar*sex_cnt)*(n colpctsum)/ rts=75
printmiss misstext='0';
run;
Proc Tabulate is great to QC most any table
Combine both continuous and categorical results in one table
SASSavvy members can access video recording
of Proc Tabulate training session
9. 9
Copyright (C) 2013, Sunil Gupta, SASSavvy.com
SAS Tip: Remove duplicate records, keep non-
missing numeric values and rename variables
Address Issues
* 1 C Process a dataset without hard coding 10 numeric variables that contain
summary results;
* 2 C Remove duplicate records that are not possible with PROC SORT with
NODUPKEY option;
* 3 C Keep non-missing values from each variable;
* 4 C Keep dataset with the original variable names without hard coding
variable names;
Three Step Process
* 1 - Get non-missing data using PROC MEANS;
* 2 - Save as macro variables using PROC SQL - original and means names;
* 3 - Rename variables back to original variable names using macros and do-
loop;
10. 10
Copyright (C) 2013, Sunil Gupta, SASSavvy.com
SAS Tip: Remove duplicate records, keep non-
missing numeric values and rename variables
* 1 - Get non-missing data and use same variable name_MAX and position notation;
proc means data=adbmk7 nway noprint;
class usubjid paramcd;
var basedt -- ttrtd0;
output out=adbmk8 (drop= _type_ _freq_) max=/autoname;
run;
* 2 - Save as macro variables - original and means names from metadata;
proc sql;
select unique name into: onamlst separated by '.' from sashelp.vcolumn
where libname='WORK' and memname='ADBMK7' and name ^in ('USUBJID'
'PARAMCD');
select unique name into: mnamlst separated by '.' from sashelp.vcolumn
where libname='WORK' and memname='ADBMK8' and name ^in ('USUBJID'
'PARAMCD');
quit;
%put &onamlst &mnamlst;
11. 11
Copyright (C) 2013, Sunil Gupta, SASSavvy.com
SAS Tip: Remove duplicate records, keep non-
missing numeric values and rename variables
* 3 - Rename variables back to original variables names with macro do-loop and
scan function;
%let rnval=1;
%macro rnvar;
data nci_adam.adbmks;
set adbmk8;
%do %while(%length(%scan(&onamlst, &rnval, %str('.'))) > 0);
rename %scan(&mnamlst, &rnval, %str('.')) = %scan(&onamlst, &rnval, %str('.'));
%let rnval = %eval(&rnval + 1);
%end;
run;
%mend rnvar;
%rnvar;
12. 12
Applying ODS Styles and Templates
SASSavvy members can access mind maps on many SAS Procedures and Topics
13. A World without SAS Macros (&, %)
What You can Expect Without SAS Macros:
? No order to get common tasks completed
? No control over the time to deliver
? No assurance of the quality of work
? No one in control to correct issues or
errors
? No method to diagnose issues or errors
? No method to grow or build on knowledge
? Loss of client confidence
? Loss of business
14. 14
Anatomy of SAS Macros: Three Coding SectionsUserInput
Define Input
Parameters
with Defaults
C Use global
macro variables
and system
functions
MacroPurpose
Data Process
within Macro
Loop
- Use metadata
and collect or
report findings
ErrorMessages
Defensive
Programming of
Input
Parameters and
Data Processing
- Display user
message or
abort if invalid
16. 2) Communication / Organization /
Documentation: Better Project Management
1. Technical training with hands-on activities for on-boarding and
monthly, engage team to present code reviews
2. Mentor program to guide and answer questions
3. IT support to address any system related issues
4. Resource Planning and Management
5. Communicate weekly conference calls
6. Central project tracking sheet and issues log for better project
management
7. Follow and maintain process flow charts and task steps including -
SDTM and ADaM specifications, create/qc SDTM, ADaM and TFLs
8. CC on all emails with client
Assume an `Outsourced¨ Model
17. 3) Master the Basics / Continuous Learning:
Certification Career Paths
Find the Certification that fits Your Needs
and Goals
? Base Certification
? Advanced Certification
? Clinical Trials Programmer Certification
? Join SASSavvy Monthly Training sessions
? Enroll in an online class
18. 18
DATA Step vs. PROC SQL Camps
DATA Step Die-Hards PROC SQL Die-Hards
Happy Camper C Use
the best of both worlds
Factors: First learned in
SAS, First encounter of
flexibility, First frustration
of complexity
SASSavvy members have quick access to my collection of SAS papers and handouts
19. SAS Display Manager World SAS Enterprise Guide World
Technical Non-Technical, Technical
DATA Step Programming, Requires More
Time for Programming
Same DATA Step Programming, Requires
Less Time using up to 90 Tasks
One Dataset/Program/Output File per
window
Cross Reference/Query Multiple
Intermediate Datasets/Programs/
Output Files
Open Programmer¨s working
environment
(Interactive C DATA Step Debugger)
Controlled Analyst¨s working
environment
(Defaults, Batch Processing)
Non-Visual Programming Visual Process Flow
19
SAS Enterprise Guide
20. SAS Programming: Leaving a Trail to Follow
From Raw to Final Dataset
? Keep intermediate datasets to
leave a trail of progress
instead of updating the same
temporary dataset. This
makes it easier to diagnose
issues and errors.
? Use a system with letters and
numbers to name
intermediate datasets to
better maintain SAS program.
? SAS Enterprise Guide makes it
easy to track and document
progress.
21. 21
Sunil¨s Tip: Understanding Differences between Where vs. If
SASSavvy members can access video recording on Where vs. if training session,
http://support.sas.com/kb/24/286.html
23. Do you believe in magic??
? Using GPS to travel the shortest
distance
? Cooking with recipes
? Using To-Do Lists
? Using calculators
? Getting organized with Excel
files
? Extreme Multi-tasking with Proc
SQL to save steps
Copyright (C) 2013, Sunil Gupta
? Add group descriptive statistics without changing the
original dataset structure (record sort, variable order)
or content
? Ideal for calculations such as change from group
mean baseline Standing room only at SGF Coder¨s Corner presentation
24. What is Group Descriptive Statistics?
Copyright (C) 2013, Sunil Gupta
Count of
females
Count of
males
How would you create sexn variable? How many steps would it take?
What if you wanted to add min and max of Weight by Sex?
At least three steps C 1) Output dataset from Proc Freq, 2) Proc Sort both
datasets and 3) Data step merge by sex.
25. Proc SQL Subquery Linked by Group Variable
proc sql; create table class2 as
select a.*,
b.sexn
from sashelp.class as a
left join
(select
sex,
count(sex) as sexn
from sashelp.class where sex > ' '
group by sex
) as b on
a.sex=b.sex;
quit;
Copyright (C) 2013, Sunil Gupta
1. Select all master variables
2. Include the new group descriptive statistics
variable
3. Apply LEFT JOIN to keep all master records
4. Create internal dataset using subquery
5. Select or create grouping variable
6. Apply one or more summary functions
7. Link internal dataset by grouping variable
Save two steps!
30. 30
SAS Procedures
(Proc SQL, etc.)
Data Step and SAS
Macro Programming
Advanced Tools
(SAS Index, System
Options, etc.)
Advanced Technology
(SAS 9.3)
Advanced SAS Skills
5) Best Practices: Return of the SAS Jedi Master
32. 32
Anatomy of a SAS Program
SAS
Programmers
are often less
productive
because of
their limited
expertise in
SAS
debugging
skills.
Just like cats,
SAS programs
do have nine
lives.
33. 33
Anatomy of a Table Shell: Demographics
Summary Table C Four Construction Factors
? ?
?
?
34. 34
Anatomy of a Table Shell: Suggestions for
Macro Program C Four Construction Factors
? Which population or subset? Ex. Efficacy, Safety. Create
a macro parameter to specify population. (required)
? Which additional subset or By variable if any? Ex. Age Group:
10 to 40 years. Create a macro parameter to specify additional
subset. (optional)
? Which treatment groups or total column and in what column
order? Ex. Active, Placebo. Create a macro parameter to specify
treatment groups and in what column order. (required)
? Which analysis variables and in what order? Ex. Sex, Race,
Age. Create a system to build the results and p-values for each
analysis variables and in the correct order. (required)
35. 35
Seven Habits of Highly Effective People
SAS Programmers should remember to also apply these
Seven Habits:
? HABIT 1: BE PROACTIVE
? Plan and schedule SAS programming and resources
? HABIT 2: BEGIN WITH THE END IN MIND
? Create complete dataset/table specifications
? HABIT 3: PUT FIRST THINGS FIRST
? Apply onboarding training and high expectations
? HABIT 4: THINK WIN-WIN
? Create an environment of trust and teamwork
? HABIT 5: SEEK FIRST TO UNDERSTAND, THEN TO BE
UNDERSTOOD
? Listen, listen and listen to your clients
? HABIT 6: SYNERGIZE
? Discuss with client and team ways to improve
service
? HABIT 7: SHARPEN THE SAW
? Allocate time for continuous learning such as joining
SAS Savvy monthly training sessions
All Levels of SAS Experience
New to SAS/Recent Graduate
Experienced SAS Programmer
Systems Macro Programmer
36. 36
Effectiveness is doing the right things. Follow
and update SOPs with standard processes.
Efficiency is concerned with doing things right.
Follow all steps and don¨t take shortcuts.
Spend 30% less time in SAS Programming by
joining SASSavvy now C Attend a members-only
free webinar to answer your SAS questions.
"Thank you for the access to such an incredible
resource. You are helping many SAS users save time
and energy searching the web!!",
Mahalo!!, Grace Matsuura, SAS Programmer, Hawaii
(One of over 100 SAS Programmer quotes)