carpenter's complete guide to the sas macro language

21
/*-------------------------------------------------------------------*/ /* Carpenter's Complete Guide to the SAS Macro Language, */ /* Second Edition */ /* by Art Carpenter */ /* Copyright(c) 2004 by SAS Institute Inc., Cary, NC, USA */ /* SAS Publications order # 59224 */ /* ISBN 1-58025-239-7 */ /*-------------------------------------------------------------------*/ /* */ /* This material is provided "as is" by SAS Institute Inc. There */ /* are no warranties, expressed or implied, as to merchantability or */ /* fitness for a particular purpose regarding the materials or code */ /* contained herein. The Institute is not responsible for errors */ /* in this material as it now exists or will exist, nor does the */ /* Institute provide technical support for it. */ /* */ /*-------------------------------------------------------------------*/ /* Questions or problem reports concerning this material may be */ /* addressed to the author: */ /* */ /* SAS Institute Inc. */ /* Books by Users */ /* Attn: Art Carpenter */ /* SAS Campus Drive */ /* Cary, NC 27513 */ /* */ /* */ /* If you prefer, you can send email to: [email protected] */ /* Use this for subject field: */ /* Comments for Art Carpenter */ /* */ /*-------------------------------------------------------------------*/ /* Date Last Updated: 02APR04 */ /*-------------------------------------------------------------------*/ /* */ /* NOTE FROM ART CARPENTER: */ /* This code is for your use, but may not be resold. */ /* Not all code from the book has been included in this text file. */ /* I have selected only complete macros and program parts that I */ /* think that you are most likely to need. The remaining code should */ /* be fairly easy to reconstruct. */ /* */ /* In order to facilitate your search for a particular piece of code,*/ /* Sections and Macro names are offset by three asterisks, for */ /* example the macro %EXIST in Section 7.6.1 could be found by */ /* searching for: */ /* ***7.6.1 */

Upload: nishuamin

Post on 03-Jan-2016

649 views

Category:

Documents


1 download

DESCRIPTION

SAS Macro language

TRANSCRIPT

Page 1: Carpenter's Complete Guide to the SAS Macro Language

/*-------------------------------------------------------------------*//* Carpenter's Complete Guide to the SAS Macro Language, *//* Second Edition *//* by Art Carpenter *//* Copyright(c) 2004 by SAS Institute Inc., Cary, NC, USA *//* SAS Publications order # 59224 *//* ISBN 1-58025-239-7 *//*-------------------------------------------------------------------*//* *//* This material is provided "as is" by SAS Institute Inc. There *//* are no warranties, expressed or implied, as to merchantability or *//* fitness for a particular purpose regarding the materials or code *//* contained herein. The Institute is not responsible for errors *//* in this material as it now exists or will exist, nor does the *//* Institute provide technical support for it. *//* *//*-------------------------------------------------------------------*//* Questions or problem reports concerning this material may be *//* addressed to the author: *//* *//* SAS Institute Inc. *//* Books by Users *//* Attn: Art Carpenter *//* SAS Campus Drive *//* Cary, NC 27513 *//* *//* *//* If you prefer, you can send email to: [email protected] *//* Use this for subject field: *//* Comments for Art Carpenter *//* *//*-------------------------------------------------------------------*//* Date Last Updated: 02APR04 *//*-------------------------------------------------------------------*//* *//* NOTE FROM ART CARPENTER: *//* This code is for your use, but may not be resold. *//* Not all code from the book has been included in this text file. */ /* I have selected only complete macros and program parts that I */ /* think that you are most likely to need. The remaining code should */ /* be fairly easy to reconstruct. *//* *//* In order to facilitate your search for a particular piece of code,*//* Sections and Macro names are offset by three asterisks, for */ /* example the macro %EXIST in Section 7.6.1 could be found by */ /* searching for: */ /* ***7.6.1 *//* ***%EXIST *//* Please note that some macros, such as %EXIST, can be found in */ /* various forms in more than one section of the book. Consult *//* Appendix 4 to determine in which section(s) a given macro can be */ /* found. *//*-------------------------------------------------------------------*;

**********************;***2.6.1

Page 2: Carpenter's Complete Guide to the SAS Macro Language

*************************;data old;do batch=1 to 3; conc=2; datadate='02jan97'd; datatime = '09:00't; output;end;format datadate mmddyy10. datatime time5.;run;

data new;set old;if batch = 2 then do; conc=2.5; datadate="&sysdate"d; datatime="&systime"t;end;run;

proc print data=new;title1 'Drug concentration';title2 "Mod date &sysdate";run;**********************;

**********************;***2.6.3*************************;* Copy the current version of the COMBINE files* to COMBTEMP;proc datasets memtype=data; copy in=combine out=combtemp;quit;%put SYSERR is &syserr;**********************;

**********************;***2.7.1*************************;%let cln = Beth;proc sql noprint; select count(*) into :nobs from clinics(where=(clinname=:"&cln")); quit;%put number of clinics for &cln is &nobs; **********************;

**********************;***2.7.2

Page 3: Carpenter's Complete Guide to the SAS Macro Language

*************************;data class; input @3 name $ 8. grade $1.; cards; Billy B Jon C Sally A run;

data school; input @3 name $ 8. gradcode $1.; cards; Billy Y Frank Y Jon N Laura Y Sally Y run;

proc sql noprint; select quote(name) into :clnames separated by ' ' from class; quit;

data clasgrad; set school (where=(name in(&clnames))); run;

proc print data=clasgrad; title 'Class Graduate Status'; run;**********************;

**********************;***2.10*************************;**************************************************;* The data set, SASCLASS.CLINICS, contains 80 *;* observations and 20 variables. The following *;* program will be used to complete the first *;* exercise in this chapter. *; **************************************************;PROC PLOT DATA=SASCLASS.CLINICS; PLOT EDU * DOB; TITLE1 "YEARS OF EDUCATION COMPARED TO BIRTH DATE"; RUN;

PROC CHART DATA=SASCLASS.CLINICS; VBAR WT / SUMVAR=HT TYPE=MEAN; TITLE1 "AVERAGE HEIGHT FOR WEIGHT GROUPS"; RUN;**********************;

Page 4: Carpenter's Complete Guide to the SAS Macro Language

**********************;***3.1.1***%LOOK**********************;%LET DSN = CLINICS;

%MACRO LOOK;

PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN;

PROC PRINT DATA=&dsn (OBS=10); RUN;

%MEND LOOK;**********************;

**********************;***3.4***%PGM**********************;%macro pgm; pgm; recall; zoom on;%mend pgm;**********************;

**********************;***3.5.2***%ZPGM**********************;option cmdmac;

%macro zpgm / cmd; pgm; recall; zoom on;%mend zpgm;**********************;

**********************;***3.8*************************;*******************************************************;**** The class data set, CLINICS, contains 80 ****;**** observations and 20 variables. The following ****;**** program will be used to complete the first two****;**** exercises in this chapter. ****;*******************************************************; PROC PLOT DATA=SASCLASS.CLINICS;

Page 5: Carpenter's Complete Guide to the SAS Macro Language

PLOT EDU * DOB; TITLE1 'YEARS OF EDUCATION COMPARED TO BIRTH DATE'; RUN;

PROC CHART DATA=SASCLASS.CLINICS; VBAR WT / SUMVAR=HT TYPE=MEAN; TITLE1 'AVERAGE HEIGHT FOR WEIGHT GROUPS'; RUN;**********************;

**********************;***4.2.1***%LOOK**********************;%MACRO LOOK(dsn,obs); PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN;

PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN;%MEND LOOK;%look(sasclass.clinics,10)**********************;

**********************;***4.2.2***%SORTIT version 1**********************;%MACRO SORTIT(DSN,BY1,BY2,BY3); PROC SORT DATA=&DSN; BY &BY1 &BY2 &BY3; RUN;%MEND SORTIT;**********************;

**********************;***4.2.2***%SORTIT version 2**********************;%MACRO SORTIT(DSN,BYLIST); PROC SORT DATA=&DSN; BY &BYLIST; RUN;%MEND SORTIT;**********************;

**********************;***4.3.1***%LOOK**********************;%MACRO LOOK(dsn=CLINICS,obs=);

Page 6: Carpenter's Complete Guide to the SAS Macro Language

PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN;

PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN;

%MEND LOOK;**********************;

**********************;***4.4.2***%LOOK**********************;%MACRO LOOK(dsn,obs=10); PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN;

PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN;%MEND LOOK;**********************;

**********************;***4.6*************************;********************************************************;**** The class data set, CLINICS, contains 80 ****;**** observations and 20 variables. The following ****;**** program will be used to complete exercise 3 ****;**** in this chapter. ****; ********************************************************; PROC PLOT DATA=SASCLASS.CLINICS; PLOT EDU * DOB; TITLE1 'YEARS OF EDUCATION COMPARED TO BIRTH DATE'; RUN; PROC CHART DATA=SASCLASS.CLINICS; VBAR WT / SUMVAR=HT TYPE=MEAN; TITLE1 'AVERAGE HEIGHT FOR WEIGHT GROUPS'; RUN; **********************;

**********************;***5.1.1 a***%DOBOTH***%LOOK***%SORTIT

Page 7: Carpenter's Complete Guide to the SAS Macro Language

**********************;%MACRO DOBOTH; %SORTIT(CLINICS,LNAME,FNAME) %LOOK(OBS=10)%MEND DOBOTH;

%MACRO LOOK(dsn=CLINICS,obs=); PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN; PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN;%MEND LOOK;

%MACRO SORTIT(DSN,BY1,BY2,BY3); PROC SORT DATA=&DSN; BY &BY1 &BY2 &BY3; RUN;%MEND SORTIT;**********************;

**********************;***5.1.1 b***%DOBOTH***%LOOK***%SORTIT**********************;%MACRO DOBOTH(d,o,b1,b2,b3); %SORTIT(&d,&b1,&b2,&b3) %LOOK(&d,&o) %MEND DOBOTH;

%MACRO LOOK(dsn,obs); PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN; PROC PRINT DATA=&dsn (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS"; RUN;%MEND LOOK;

%MACRO SORTIT(DSET,BY1,BY2,BY3); PROC SORT DATA=&DSET; BY &BY1 &BY2 &BY3; RUN;%MEND SORTIT;**********************;

**********************;***5.2.3***%TESTIN**********************;%macro testin(var,varlist); %if &var in &varlist %then

Page 8: Carpenter's Complete Guide to the SAS Macro Language

%put Found |&var| in |&varlist|;%mend testin;

%testin(aa, aa bb cc) %testin(AA, aa bb cc) **********************;

**********************;***5.3.1***%DOBOTH**********************;%MACRO DOBOTH(dsn,obs,by1,by2,by3);

%IF &BY1 ^= %THEN %DO; PROC SORT DATA=&DSN; BY &BY1 &BY2 &BY3; RUN; %END;

PROC CONTENTS DATA=&dsn; TITLE "DATA SET &dsn"; RUN;

PROC PRINT DATA=&dsn %IF &OBS>0 %THEN %DO; (OBS=&obs); TITLE2 "FIRST &obs OBSERVATIONS" %END; ; RUN;%MEND DOBOTH;**********************;

**********************;***5.3.2a***%ALLYEAR**********************;%MACRO ALLYR(START,STOP); %DO YEAR = &START %TO &STOP; DATA TEMP; SET YR&YEAR; YEAR = 1900 + &YEAR; RUN; PROC APPEND BASE=ALLYEAR DATA=TEMP; RUN; %END;%MEND ALLYR;**********************;

**********************;***5.3.2b***%ALLYEAR**********************;%MACRO ALLYR(START,STOP);

Page 9: Carpenter's Complete Guide to the SAS Macro Language

DATA ALLYEAR; SET %DO YEAR = &START %TO &STOP; YR&YEAR(IN=IN&YEAR) %END;;

YEAR = 1900 %DO YEAR = &START %TO &STOP; + (IN&YEAR*&YEAR) %END;;

RUN;%MEND ALLYR;**********************;

**********************;***5.3.3***%ALLYEAR**********************;%MACRO ALLYR(START,STOP); %LET CNT = 0; %DO %UNTIL(&YEAR >= &STOP); %LET YEAR = %EVAL(&CNT + &START);

DATA TEMP; SET YR&YEAR; YEAR = 1900 + &YEAR; RUN;

PROC APPEND BASE=ALLYEAR DATA=TEMP; RUN;

%LET CNT = %EVAL(&CNT + 1); %END;%MEND ALLYR;**********************;

**********************;***5.3.4***%ALLYEAR**********************;%MACRO ALLYR(START,STOP); %LET YEAR = &START; %DO %WHILE(&YEAR <= &STOP);

DATA TEMP; SET YR&YEAR; YEAR = 1900 + &YEAR; RUN; PROC APPEND BASE=ALLYEAR DATA=TEMP; RUN;

%LET YEAR = %EVAL(&YEAR + 1); %END;%MEND ALLYR;

Page 10: Carpenter's Complete Guide to the SAS Macro Language

**********************;

**********************;***5.4.2a***%ONE***%TWO**********************;%let outside = AAA;

%macro one; %global inone; %let inone = BBB;%mend one;

%macro two; %let intwo = CCC; %mend two;

%macro last; %one %two %put &outside &inone &intwo; %mend last;

%last**********************;

**********************;***5.4.2b***%OUTSIDE***%INSIDE**********************;%macro outside; %let aa = 5; %inside(3) %put outside &aa;%mend outside;

%macro inside(aa); %put inside &aa;%mend inside;

%outside**********************;

**********************;***5.4.2c***%OUTSIDE***%INSIDE**********************;%macro inside(var); %let bb = &var; %put inside &bb;%mend inside;

Page 11: Carpenter's Complete Guide to the SAS Macro Language

%* This LET statement makes &BB global;%let bb = 5;%inside(3)%put outside &bb;**********************;

**********************;***5.4.2d***%INSIDE**********************;%macro inside(var); %local bb; %let bb = &var; %put inside &bb;%mend inside;

%let bb = 5;%inside(3)%put outside &bb;**********************;

**********************;***5.4.5***%DSNPROMPT**********************;%macro dsnprompt(lib=sasuser);%* prompt user to for data set name;%window verdsn color=white #2 @5 "Specify the data set of interest" #3 @5 "for the library &lib" #4 @5 'Enter Name: ' dsn 20 ATTR=UNDERLINE REQUIRED=YES ;

%display verdsn;

proc print data=&lib..&dsn;run;%mend dsnprompt;

%dsnprompt(lib=sasclass)**********************;

**********************;***5.6.9*************************;%let a = AAA;%macro try;%put &a;%if &a = AAA %then %put no quotes;%if '&a' = 'AAA' %then %put single quotes;%if 'AAA' = 'AAA' %then %put exact strings;%if "&a" = "AAA" %then %put double quotes;%if "&a" = 'AAA' %then %put mixed quotes;

Page 12: Carpenter's Complete Guide to the SAS Macro Language

%if "&a" = AAA %then %put quotes on one side only;%mend;%try**********************;

**********************;***6.2.1a***%LOOK**********************;DATA CONTROL; DSNAME='CLINICS'; NOBS='5';RUN;%MACRO LOOK; DATA _NULL_; SET CONTROL; CALL SYMPUT('DSN',DSNAME); CALL SYMPUT('OBS',NOBS); RUN; PROC CONTENTS DATA=&DSN; RUN; PROC PRINT DATA=&DSN (OBS=&OBS); RUN;%MEND LOOK;**********************;

**********************;***6.2.1b***%PLOTIT**********************;%MACRO PLOTIT; PROC SORT DATA=CLINICS; BY REGION; RUN; * Count the unique regions and create * a macro variable for each value.; DATA _NULL_; SET CLINICS; BY REGION; IF FIRST.REGION THEN DO; * Count the regions; I+1; * Create char var with count (II). Allow; * up to 99 unique regions; II=LEFT(PUT(I,2.)); * Assign value of region to a mac var; CALL SYMPUT('REG'||II,REGION); CALL SYMPUT('TOTAL',II); END; RUN;

* Do a separate PROC GPLOT step for; * each unique region;%DO I=1 %TO &TOTAL; PROC GPLOT DATA=CLINICS;

Page 13: Carpenter's Complete Guide to the SAS Macro Language

PLOT HT * WT; WHERE REGION="&&REG&I"; TITLE1 "Height/Weight for REGION &&REG&I"; RUN;%END;%MEND PLOTIT;**********************;

**********************;***6.2.1c***%PLOTIT**********************;%MACRO PLOTIT; PROC SORT DATA=CLINICS OUT=REGCLN(KEEP=REGION) NODUPKEY; BY REGION; RUN; DATA _NULL_; SET REGCLN END=EOF; * Count the regions; I+1; * Create char var with count (II); II=LEFT(PUT(I,2.)); CALL SYMPUT('REG'||II,REGION); IF EOF THEN CALL SYMPUT('TOTAL',II); RUN;%DO I=1 %TO &TOTAL; PROC GPLOT DATA=CLINICS; PLOT HT * WT; WHERE REGION="&&REG&I"; TITLE1 "Height/Weight for REGION &&REG&I"; RUN;%END;%MEND PLOTIT;**********************;

**********************;***6.2.1d***%DOIT**********************;* 1993 Water quality data.*************************************************;data a1 (keep=datetime station depth temp ph do cond salinity);input datetime datetime13. @15 station $3. depth temp ph do cond salinity;label datetime = 'date and time of sample collection' station = 'station' depth = 'water depth (ft)' temp = 'temperature (C)' ph = 'pH' do = 'dissolved oxygen' cond = 'conductivity' salinity = 'salinity';

Page 14: Carpenter's Complete Guide to the SAS Macro Language

format datetime datetime13.;datalines;06FEB93:09:15 TS3 0 13.6 7.9 8.8 20.3 12.106FEB93:09:15 TS3 1 13.5 7.9 8.7 20.4 12.206FEB93:09:15 TS3 2 13.5 7.88 8.7 22.1 13.306FEB93:09:15 TS3 3 14.1 8.05 9 46.2 29.906FEB93:09:15 TS3 4 14.2 8.05 8.9 48.1 31.310FEB93:11:51 TS3 0 13.9 7.91 9.5 0.57 0.2710FEB93:11:51 TS3 1 13.9 7.89 9.5 0.57 0.2710FEB93:11:51 TS3 2 13.9 7.88 9.4 0.57 0.2710FEB93:11:51 TS3 3 13.8 7.88 9.5 0.57 0.2710FEB93:11:51 TS3 4 13.8 7.87 9.4 0.56 0.2716FEB93:07:36 TS3 0 12.9 7.86 9.1 8.8 4.916FEB93:07:36 TS3 1 12.9 7.85 9 9.3 5.1916FEB93:07:36 TS3 2 13 7.85 8.8 9.7 5.4316FEB93:07:36 TS3 3 13 7.86 8.8 9.7 5.4316FEB93:07:36 TS3 4 13 7.85 8.7 9.3 5.1920FEB93:09:08 TS3 0 13.1 7.99 9.9 0.78 0.3820FEB93:09:08 TS3 1 13.1 7.99 9.9 0.78 0.3820FEB93:09:08 TS3 2 13.1 7.99 9.9 0.76 0.3720FEB93:09:08 TS3 3 13.1 7.98 9.8 0.76 0.3720FEB93:09:08 TS3 4 13.1 7.97 9.8 0.75 0.3602MAR93:12:31 TS3 0 14.9 8.03 10.1 0.83 0.4102MAR93:12:31 TS3 1 14.9 8.03 10.1 0.83 0.4102MAR93:12:31 TS3 2 14.9 8.01 10.1 0.82 0.4102MAR93:12:31 TS3 3 14.9 8.01 10 0.82 0.4102MAR93:12:31 TS3 4 14.9 8.02 10 0.8 0.3902MAR93:12:31 TS3 5 14.9 8.02 10 0.8 0.3907MAR93:08:56 TS3 0 14.4 7.92 8.6 11 6.2207MAR93:08:56 TS3 1 14.3 7.92 8.7 11 6.2207MAR93:08:56 TS3 2 14.3 7.92 8.7 11.5 6.5307MAR93:08:56 TS3 3 14.3 7.91 8.7 11.2 6.3507MAR93:08:56 TS3 4 14.3 7.9 8.8 11.2 6.3507MAR93:08:56 TS3 5 14.5 8.06 8.8 36.4 2315MAR93:14:20 TS3 0 19.7 8.35 10.9 1.3 0.6515MAR93:14:20 TS3 1 19.6 8.33 10.9 1.28 0.6415MAR93:14:20 TS3 2 19.6 8.34 11.1 1.3 0.6515MAR93:14:20 TS3 3 19.6 8.34 11.4 1.3 0.6515MAR93:14:20 TS3 4 19.7 8.33 11.6 1.43 0.7127MAR93:13:40 TS3 0 16.9 8.4 9.5 0.85 0.4227MAR93:13:40 TS3 1 16.9 8.39 9.4 0.85 0.4227MAR93:13:40 TS3 2 16.9 8.39 9.4 0.85 0.4227MAR93:13:40 TS3 3 16.9 8.38 9.4 0.83 0.4127MAR93:13:40 TS3 4 16.9 8.38 9.4 0.84 0.4127MAR93:13:40 TS3 5 16.9 8.36 9.4 0.84 0.4101APR93:11:03 TS3 0 19 8.42 10 1.44 0.701APR93:11:03 TS3 2 19 8.41 9.9 1.44 0.701APR93:11:03 TS3 4 18.9 8.4 9.8 1.41 0.701APR93:11:03 TS3 6 18.8 8.39 9.6 1.42 0.703APR93:06:22 TS3 0 15.2 7.88 7.9 16.2 9.503APR93:06:22 TS3 1 15.2 7.88 7.7 17.1 1003APR93:06:22 TS3 2 15.2 8.01 8.4 49.2 32.103APR93:06:22 TS3 3 15.2 8.03 8.3 50.9 33.403APR93:06:22 TS3 4 15.2 8.03 8.3 50.8 33.303APR93:06:22 TS3 5 15.2 8.03 8.3 50.5 33.106APR93:09:00 TS3 0 15.7 . 8.4 51.4 33.806APR93:09:00 TS3 2 15.6 8.14 . 51.5 33.8

Page 15: Carpenter's Complete Guide to the SAS Macro Language

06APR93:09:00 TS3 4 . 8.12 . . .06APR93:09:00 TS3 6 15.6 8.11 8.1 . .07APR93:09:15 TS3 0 17.1 8.16 8.8 49.8 32.607APR93:09:15 TS3 2 17.1 8.16 8.6 49.8 32.607APR93:09:15 TS3 4 17.1 8.15 8.6 49.7 32.507APR93:09:15 TS3 6 17.1 8.14 8.5 49.8 32.622APR93:10:20 TS3 0 17.1 8.22 8.6 48.5 31.622APR93:10:20 TS3 2 17.1 8.2 8.6 48.5 31.622APR93:10:20 TS3 4 17 8.19 8.5 48.5 31.622APR93:10:20 TS3 6 17 8.15 8.1 48.5 31.624APR93:12:06 TS3 0 18.8 8.1 8.3 45.5 29.524APR93:12:06 TS3 2 18.8 8.09 8.1 45.5 29.524APR93:12:06 TS3 4 18.8 8.1 8 45.3 29.324APR93:12:06 TS3 6 18.8 8.13 7.8 45.5 29.529APR93:12:09 TS3 0 21.8 8.07 7.2 28.2 17.329APR93:12:09 TS3 1 21.4 8.15 7.7 35.7 22.529APR93:12:09 TS3 2 21.2 8.19 7.7 39.7 25.329APR93:12:09 TS3 4 20.7 8.17 7.8 41.8 26.829APR93:12:09 TS3 5 19.9 8.16 7.2 41.8 26.829APR93:12:09 TS3 6 18.8 8.08 5.9 45.3 29.305MAY93:09:24 TS3 0 17.7 8.18 7.9 51 33.505MAY93:09:24 TS3 2 17.7 8.18 7.9 50.8 33.305MAY93:09:24 TS3 4 17.7 8.17 7.8 51 33.505MAY93:09:24 TS3 6 17.7 8.17 7.8 50.8 33.315MAY93:11:25 TS3 0 19.6 8.11 7.2 42.8 27.515MAY93:11:25 TS3 2 19.3 8.13 7.2 44.9 2915MAY93:11:25 TS3 4 19.2 8.13 7.2 45.8 29.715MAY93:11:25 TS3 6 18.5 8.15 7.5 46.8 30.423MAY93:12:06 TS3 0 17.4 8.19 7.8 51.3 33.723MAY93:12:06 TS3 2 17.3 8.19 7.8 51.2 33.623MAY93:12:06 TS3 4 17.3 8.18 7.7 51.1 33.523MAY93:12:06 TS3 6 17.3 8.18 7.7 51.2 33.601JUN93:12:00 TS3 0 18.9 8.13 8.8 50.7 33.201JUN93:12:00 TS3 2 18.8 8.12 8.8 50.8 33.801JUN93:12:00 TS3 4 18.8 8.11 8.7 50.7 33.201JUN93:12:00 TS3 6 18.7 8.12 8.6 50.7 33.203JUN93:20:08 TS3 0 18.6 8.31 8 52.7 34.703JUN93:20:08 TS3 2 18.6 8.31 8 52.6 34.603JUN93:20:08 TS3 4 18.5 8.3 8 52.6 34.603JUN93:20:08 TS3 6 18.5 8.31 8 52.5 34.604JUN93:06:02 TS3 0 19.9 8.08 5.1 50.2 32.904JUN93:06:02 TS3 2 19.8 8.07 5 50.4 3304JUN93:06:02 TS3 4 19.9 8.07 5 50.3 32.904JUN93:06:02 TS3 6 19.9 8.07 4.9 50.3 32.911JUN93:09:50 TS3 0 23 7.92 3.8 51 33.511JUN93:09:50 TS3 2 23 7.92 3.8 51.1 33.511JUN93:09:50 TS3 4 22.9 7.92 3.8 50.7 33.211JUN93:09:50 TS3 6 22.7 7.92 3.7 51.1 33.516JUN93:13:03 TS3 0 22.1 8.16 8.5 52.3 34.416JUN93:13:03 TS3 2 22 8.15 8.2 52.1 34.316JUN93:13:03 TS3 4 22 8.15 8.1 51.9 34.116JUN93:13:03 TS3 6 22 8.15 8.1 51.7 3406FEB93:09:43 TS6 0 13.9 8.07 8.8 32.5 20.306FEB93:09:43 TS6 1 13.9 8.05 8.7 38.1 24.206FEB93:09:43 TS6 2 14 8.06 8.6 44.6 28.806FEB93:09:43 TS6 3 14.1 8.06 8.4 45.5 29.406FEB93:09:43 TS6 4 14.1 8.04 8.6 49.2 32.1

Page 16: Carpenter's Complete Guide to the SAS Macro Language

06FEB93:09:43 TS6 5 14.2 8.06 8.7 50.3 32.906FEB93:09:43 TS6 6 14.3 8.06 8.7 51.1 33.510FEB93:12:22 TS6 0 14.2 7.96 9.5 0.59 0.2910FEB93:12:22 TS6 1 14.1 7.94 9.4 0.59 0.2910FEB93:12:22 TS6 2 13.8 7.92 9.2 0.82 0.410FEB93:12:22 TS6 3 13.8 7.88 9.1 1.07 0.5310FEB93:12:22 TS6 4 13.7 7.86 8.8 1.76 0.8910FEB93:12:22 TS6 5 13.6 7.78 8.4 3.82 216FEB93:08:18 TS6 0 13.6 8.32 9.7 3.4 1.7716FEB93:08:18 TS6 1 13.6 8.26 9.6 4.39 2.3316FEB93:08:18 TS6 2 13.6 8.2 9.5 5.34 2.8716FEB93:08:18 TS6 3 13.5 8.08 9.1 7.97 4.416FEB93:08:18 TS6 4 13.6 7.86 8.8 15 8.720FEB93:09:50 TS6 0 13.4 8.02 9.7 1.08 0.5320FEB93:09:50 TS6 1 13.3 7.97 9.7 1.06 0.5320FEB93:09:50 TS6 2 13.2 7.97 9.7 1.1 0.5420FEB93:09:50 TS6 3 13.4 7.96 9.5 2.83 1.4620FEB93:09:50 TS6 4 13.5 7.96 9.3 4.56 2.4220FEB93:09:50 TS6 5 13.8 7.95 9.2 7.25 3.9820FEB93:09:50 TS6 6 14.8 8.13 8.4 8.8 4.8920FEB93:09:50 TS6 7 15.2 8.03 7.6 28.2 17.320FEB93:09:50 TS6 7.5 15.2 8.02 7.1 30.6 18.902MAR93:14:20 TS6 0 16 8.21 10.9 0.89 0.4302MAR93:14:20 TS6 1 15.9 8.2 10.8 0.87 0.4202MAR93:14:20 TS6 2 15.9 8.19 10.7 0.87 0.4202MAR93:14:20 TS6 2.5 15.9 8.19 10.6 0.88 0.4307MAR93:10:30 TS6 0 16.2 8.08 9.3 7.61 4.1807MAR93:10:30 TS6 1 15.8 8.11 9.5 11.7 6.6507MAR93:10:30 TS6 2 15.3 8.14 10 18.3 10.807MAR93:10:30 TS6 3 14.9 8.09 10.4 25.6 15.607MAR93:10:30 TS6 4 14.6 8.06 10.7 27.2 16.707MAR93:10:30 TS6 5 14.5 8.04 10.5 31.4 19.515MAR93:16:43 TS6 0 19.2 8.39 . 0.92 0.4515MAR93:16:43 TS6 1 19.3 8.38 . 0.92 0.4515MAR93:16:43 TS6 2 19.3 8.38 . 0.94 0.4615MAR93:16:43 TS6 3 19.3 8.37 . 0.93 0.4515MAR93:16:43 TS6 3.5 19.4 8.37 . 0.93 0.4527MAR93:14:57 TS6 0 18 8.6 11.6 3.71 1.9527MAR93:14:57 TS6 1 17.6 8.67 12.4 4.75 2.5427MAR93:14:57 TS6 2 17.4 8.59 11.8 9.24 5.227MAR93:14:57 TS6 3 17.3 8.6 11.8 9.89 5.627MAR93:14:57 TS6 3.5 17.3 8.59 11.9 10.1 5.701APR93:13:40 TS6 0 23.9 9.56 23.3 3.85 201APR93:13:40 TS6 1 23.9 9.55 23.6 3.82 201APR93:13:40 TS6 2 23.9 9.53 23.1 3.75 201APR93:13:40 TS6 3 23.9 9.53 23 3.79 203APR93:08:03 TS6 0 16.8 8.2 8.7 10.1 5.706APR93:11:08 TS6 0 17 8 8.2 25.6 15.606APR93:11:08 TS6 1 16.8 8.06 8.3 33.8 21.206APR93:11:08 TS6 2 16.4 8.14 9.2 43.1 27.706APR93:11:08 TS6 3 16.3 8.16 9.6 44.5 28.706APR93:11:08 TS6 4 16.2 8.17 9.7 46 29.806APR93:11:08 TS6 5 16.2 8.17 9.8 46 29.807APR93:10:49 TS6 0 18 7.88 7.3 7.4 4.107APR93:10:49 TS6 1 17.5 8.13 8.1 49 3207APR93:10:49 TS6 2 17.5 8.13 8.1 48.9 31.907APR93:10:49 TS6 3 17.5 8.12 8.1 49.1 32.1

Page 17: Carpenter's Complete Guide to the SAS Macro Language

07APR93:10:49 TS6 4 17.5 8.13 8 49.6 32.407APR93:10:49 TS6 5 17.5 8.13 8 49.5 32.422APR93:11:45 TS6 0 18.7 7.84 8.4 45.5 29.522APR93:11:45 TS6 1 18.3 7.82 8.8 47.5 30.922APR93:11:45 TS6 2 18.2 7.92 8.7 48.1 31.322APR93:11:45 TS6 3 18.2 7.9 8.7 48.1 31.322APR93:11:45 TS6 4 18.2 7.97 8.6 48.1 31.324APR93:14:05 TS6 0 21.5 8.28 10.2 45.6 29.524APR93:14:05 TS6 1 21.5 8.27 9.9 45.4 29.424APR93:14:05 TS6 2 21.3 8.28 9.8 45.4 29.424APR93:14:05 TS6 3.5 21.3 8.29 9.7 45.6 29.529APR93:13:42 TS6 0 25.7 8.22 8.2 40.2 25.729APR93:13:42 TS6 1 25.7 8.21 8.1 40.7 2629APR93:13:42 TS6 2 25.8 8.2 8.1 40.1 25.629APR93:13:42 TS6 3 26.1 8.2 8 40.4 25.705MAY93:11:03 TS6 0 18.6 8.19 8.2 50.5 33.105MAY93:11:03 TS6 2 18.6 8.19 8.2 50.3 32.905MAY93:11:03 TS6 4 18.6 8.18 8.2 50.5 33.105MAY93:11:03 TS6 5 18.6 8.18 8.1 50.1 32.815MAY93:13:54 TS6 0 23.9 8.1 7 46.2 3015MAY93:13:54 TS6 1 23.9 8.11 7.2 46.3 3015MAY93:13:54 TS6 2 24 8.15 7.5 47.3 30.815MAY93:13:54 TS6 3 24.1 8.16 7.6 47.5 30.923MAY93:15:04 TS6 0 19.8 8.2 8.1 51.3 33.723MAY93:15:04 TS6 2 19.8 8.2 8.1 51.7 3423MAY93:15:04 TS6 4 19.8 8.2 8.1 51.1 33.501JUN93:14:07 TS6 0 25.5 8.23 7.8 52.9 34.901JUN93:14:07 TS6 1 25.3 8.22 7.7 52.6 34.601JUN93:14:07 TS6 2 25.5 8.22 7.7 52.7 34.701JUN93:14:07 TS6 3 25.5 8.21 7.6 52.7 34.703JUN93:21:20 TS6 0 18.5 8.34 7.9 52.9 34.903JUN93:21:20 TS6 2 18.5 8.33 7.8 52.9 34.903JUN93:21:20 TS6 4 18.5 8.33 7.8 52.9 34.903JUN93:21:20 TS6 6 18.5 8.33 7.7 53 34.903JUN93:21:20 TS6 8 18.5 8.33 7.6 52.9 34.904JUN93:07:20 TS6 0 18.8 8.05 3.6 52.2 34.404JUN93:07:20 TS6 1 18.7 8.05 3.6 52.7 34.704JUN93:07:20 TS6 2 18.8 8.04 3.5 51.6 33.904JUN93:07:20 TS6 3 18.8 8.04 3.4 51.