ChekOut.sas
From sasCommunity
This program is from this paper:
http://www.sascommunity.org/wiki/sugi23.197
posted and polished by --macro maven == the radical programmer 10:44, 18 May 2007 (EDT)
/* TLI OUTLIERS REPORT
2007-May-17 RJF2 polishing of original program
provided by J. Handsfield
NOTE: This version is Not -exactly- what is in the paper!
***/
%Let PGMPATH = .;%*here;
%Let InLibref = Library;
%Let InData = Samples;
%Let PRNTFILE = zChekOut.txt;
%LET MODVARS = CD45POS CD14POS CD4COMB CD8COMB CD19COMB CD51COMB
CD3COMB CD4CTCMB CD8CTCMB
CD16COMB CD56COMB LYMPCT LYMCNT WBC;
%LET GLMVARS = R45 R14 R4 R8 R19 R51 R3 R4CT R8CT R16 R56 RLP RLC RWB;
%LET PRNTFILE = "&PGMPATH.\TLIOUT.SAS";
OPTIONS PAGENO=1 NOCENTER NOFMTERR MPRINT NODATE PS=57 LS=99;
*missing _;
;/*--------------------------------------------------------------------*
When printing, select PRINT SETUP and select PORTRAIT,
and a left margin of 0.6.
Use SAS MonoSpace 9 font for best presentation (PS=58 LS=96).
;/*-------------------------------------------------------------------*/
%*INCLUDE SASAUTOS(IDATE);
%let typeREPT = Outlier;
%*INCLUDE SASAUTOS(TLUTITLE);
/*. Begin Macro Code ................................................*/
%MACRO ID(msg);
if NOT ID then do;
put "IF MPEPNum = '" MPEPNum
+B1 "' and FormNmbr = '" FormNmbr
+B1 "' and DONOR = " DONOR
+B1 " and SAMPID = '" SAMPID
+B1 "' "/" and OBSNUM = " OBSNUM
+B1 " then do;";
ID = 1; *********************************************************;
end;
put " *&msg.;"; *****************************************; %mend ID;
%MACRO SHOW(field);
CALL VNAME(&FIELD,NAME);
OUTL+1;
put @1 " *" @4 NAME @13 " = " &FIELD. +B1";"; ********; %mend show;
%MACRO SHOW2(field);
CALL VNAME(&FIELD,NAME);
put @1 " *" @4 NAME @13 " = " &FIELD. +B1";"; *******; %mend show2;
%MACRO SHOW3(field);
CALL VNAME(&FIELD,NAME);
put @1 " " @4 NAME @13 " = . " +B1";"; *******; %mend show3;
/*..... End Macro Code ..............................................*/
%*PROC SORT DATA = LIBRARY.SAMPLES;
PROC SORT DATA = &InLibref..&InData.
OUT = SAMPLES;
BY DONOR;
PROC GLM DATA = SAMPLES NOPRINT;
*CLASS DONOR;
BY DONOR;
MODEL &MODVARS. = DONOR;
OUTPUT
OUT = UPP
RSTUDENT = &GLMVARS.;
PROC SORT DATA = UPP
OUT = RANGE;
BY MPEPNUM FORMNMBR DONOR;
DATA _NULL_;
retain B1 -1; /* Pointer Control */
retain total 0;
retain outl 0;
file &PRNTFILE;
set RANGE end = EndoFile;
LENGTH ID 3; ID = 0;
LENGTH NAME $8; /* Used in MACRO SHOW */
/* Array Processing for output variables */
array OUTLIER{*} 3 &GLMVARS.;
array SCORE{*} 3 &MODVARS.;
DO I = 1 TO DIM(SCORE);
IF SCORE{i} NE . THEN TOTAL+1;
end;
DO I = 1 TO DIM(OUTLIER);
IF ( ABS(OUTLIER{i}) GE 3 ) THEN DO;
%ID(REVIEW: OUTLIER)
%SHOW(OUTLIER{i})
%SHOW2(SCORE{i})
%SHOW3(SCORE{i})
end;**** ABS GE &STATVAL ***********;
end;*** Array Processing****;
IF ENDOFILE THEN DO;
PCTOUT = (OUTL/TOTAL);
FORMAT PCTOUT PERCENT8.2;
END;
/* End of Record -- NO EDITS BELOW THIS LINE *************************/
if ID then put "END; *MPEPNum PROCESSING;";
if EndoFile then
put "*Number of OUTLIERS = " OUTL ";"
/ "*Number of RESULTS = " TOTAL ";"/
"*Percent OUTLIERS = " PCTOUT ";"/
"****END OF JOB;";
data _NULL_;
file PRINT;
do until(EndoFile);
infile &PRNTFILE end = EndoFile pad lrecl = 88;
input @1 Line $char88.;
put @1 Line $char88.;
end;
stop;
RUN;
Categories: Data Review | GLM | SAS Code
