*------------------------------------------------------------------* | Purpose: To identify outliers based on n standard deviations | | from the mean. | | Arguments: DSN - Data set name | | VAR - Numeric variable to be checked | | IDVAR - ID variable name | | N_SD - The number of standard deviation units for | | declaring an outlier | | | | Example: %SD_ALL(CLEAN.PATIENTS,HR,PATNO,2) | *------------------------------------------------------------------*; %MACRO SD_ALL(DSN,VAR,IDVAR,N_SD); TITLE1 "Outliers for Variable &VAR Data Set &DSN"; TITLE2 "Based on &N_SD Standard Deviations"; PROC MEANS DATA=&DSN NOPRINT; VAR &VAR ; OUTPUT OUT=MEANS(DROP=_TYPE_ _FREQ_) MEAN=M STD=S; RUN; DATA _NULL_; FILE PRINT; SET &DSN; IF _N_ = 1 THEN SET MEANS; IF &VAR LT M - &N_SD*S AND &VAR NE . OR &VAR GT M + &N_SD*S THEN PUT &IDVAR= &VAR=; RUN; PROC DATASETS LIBRARY=WORK NOLIST; DELETE MEANS; RUN; QUIT; %MEND SD_ALL;