LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous (more recent) messageNext (less recent) messagePrevious (more recent) in topicNext (less recent) in topicPrevious (more recent) by same authorNext (less recent) by same authorPrevious page (January 2005, week 3)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Fri, 21 Jan 2005 11:26:01 -0500
Reply-To:   "Miller, Jeremy T." <zyp9@CDC.GOV>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   "Miller, Jeremy T." <zyp9@CDC.GOV>
Subject:   Re: macro logic
Content-Type:   text/plain; charset="us-ascii"

Thanks for the input everyone. Kenneth Moody had what I was needing:

This works:

data &dsn ; INFILE "Q:\Projects\Mortality\Flat\&dsn" LRECL=400 RECFM=V TRUNCOVER ; %if &yr >= 1983 and &yr <=1987 %then %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_79_88.txt"; %else %if &yr = 1988 %then %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_88.txt"; %else %if &yr >= 1989 and &yr <=1991 %then %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_89_91.txt"; %else %if &yr >= 1992 and &yr <=1995 %then %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_92_95.txt"; %else %if &yr >= 1996 and &yr <=1998 %then %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_96_98.txt"; %else %include "Q:\Projects\HAV_mort_83_02\Code\Inputs\in_99.txt"; ;

Jim, I've tested my the macro with test infiles, and not all of the %INCLUDES are ran. The only %INCLUDE that is processed is the one meeting the condition. See the output below: I just ran years 1991 and 1992. In year 1992, the variable EDU was added and the RACE var changed from RACE1 to RACE2. This is shown in the log and is resulting data. I believe that if every %INCLUDE was ran, I would be stuck with just the last one. Also, the previous two %INCLUDES were not ran.

David, yes, the macro is not needed, but it does exactly what I need it to do: the use of the macro allows me to 1) name each file produced the name of its flat counterpart (I'm not combining the files here)--this is read from the CALL SYMPUT, (2) and only run certain years if needed, and (3) is scalable. Addtionally, other parts of the macro were not shown.

MLOGIC(READIN): %LET (variable name is YR) SYMBOLGEN: Macro variable DSN resolves to MCMORT1991 SYMBOLGEN: Macro variable DSN resolves to MCMORT1991 MPRINT(READIN): data MCMORT1991 ; SYMBOLGEN: Macro variable DSN resolves to MCMORT1991 MPRINT(READIN): INFILE "Q:\Projects\Mortality\Flat\MCMORT1991" LRECL=400 RECFM=V TRUNCOVER ; SYMBOLGEN: Macro variable YR resolves to 1991 SYMBOLGEN: Macro variable YR resolves to 1991 MLOGIC(READIN): %IF condition &yr >= 1983 and &yr <=1987 is FALSE SYMBOLGEN: Macro variable YR resolves to 1991 MLOGIC(READIN): %IF condition &yr = 1988 is FALSE SYMBOLGEN: Macro variable YR resolves to 1991 SYMBOLGEN: Macro variable YR resolves to 1991 MLOGIC(READIN): %IF condition &yr >= 1989 and &yr <=1991 is TRUE MPRINT(READIN): input @26 REG 1. @39 POP_RES $CHAR1. @55 DTH_MON 2. @57 DTH_DAY 2. @1 DTH_YR 2. @59 GENDER 1. @60 RACE1 2. @64 AGE_fl 1. @65 AGE_un 2. @69 AGE_GRP 2. @75 HOSP_STA2 1. @77 MAR_STAT 1. @80 HISP_OR 2. @83 DAY_DIE 1. @84 AUTOP 1. @85 BUSN 3. @88 US_JOB 3. @26 REG_OCC 1. @119 ST_OCC 2. @121 CNTY_OCC $CHAR3. @41 REG_RES 1. @124 ST_RES 2. @126 CNTY_RES $CHAR3. @141 WHR_DIE 1. @142 U_CODE $CHAR4. @164 EA_CD1 $CHAR4. @171 EA_CD2 $CHAR4. @178 EA_CD3 $CHAR4. @185 EA_CD4 $CHAR4. @192 EA_CD5 $CHAR4. @199 EA_CD6 $CHAR4. @206 EA_CD7 $CHAR4. @213 EA_CD8 $CHAR4. @220 EA_CD9 $CHAR4. @227 EA_CD10 $CHAR4. @234 EA_CD11 $CHAR4. @241 EA_CD12 $CHAR4. @248 EA_CD13 $CHAR4. @255 EA_CD14 $CHAR4. @262 EA_CD15 $CHAR4. @269 EA_CD16 $CHAR4. @276 EA_CD17 $CHAR4. @283 EA_CD18 $CHAR4. @290 EA_CD19 $CHAR4. @297 EA_CD20 $CHAR4. @341 RA_CD1 $CHAR4. @346 RA_CD2 $CHAR4. @351 RA_CD3 $CHAR4. @356 RA_CD4 $CHAR4. @361 RA_CD5 $CHAR4. @366 RA_CD6 $CHAR4. @371 RA_CD7 $CHAR4. @376 RA_CD8 $CHAR4. @381 RA_CD9 $CHAR4. @386 RA_CD10 $CHAR4. @391 RA_CD11 $CHAR4. @396 RA_CD12 $CHAR4. @401 RA_CD13 $CHAR4. @406 RA_CD14 $CHAR4. @411 RA_CD15 $CHAR4. @416 RA_CD16 $CHAR4. @421 RA_CD17 $CHAR4. @426 RA_CD18 $CHAR4. @431 RA_CD19 $CHAR4. @436 RA_CD20 $CHAR4. ; <snip> MPRINT(READIN): run;

NOTE: The infile "Q:\Projects\Mortality\Flat\MCMORT1991" is: File Name=Q:\Projects\Mortality\Flat\MCMORT1991, RECFM=V,LRECL=400

NOTE: 2173060 records were read from the infile "Q:\Projects\Mortality\Flat\MCMORT1991". The minimum record length was 400. The maximum record length was 400. One or more lines were truncated. NOTE: The data set WORK.MCMORT1991 has 147 observations and 65 variables. NOTE: DATA statement used (Total process time): real time 2:08.65 user cpu time 1:34.82 system cpu time 1.42 seconds Memory 213k

MLOGIC(READIN): %DO loop index variable I is now 10; loop will iterate again. MPRINT(READIN): data _null_; MPRINT(READIN): set flat2; SYMBOLGEN: Macro variable I resolves to 10 MPRINT(READIN): call symput('dsn', trim(left(var_10))); MPRINT(READIN): run;

NOTE: There were 1 observations read from the data set WORK.FLAT2. NOTE: DATA statement used (Total process time): real time 0.01 seconds user cpu time 0.01 seconds system cpu time 0.00 seconds Memory 145k

MLOGIC(READIN): %LET (variable name is YR) SYMBOLGEN: Macro variable DSN resolves to MCMORT1992 SYMBOLGEN: Macro variable DSN resolves to MCMORT1992 MPRINT(READIN): data MCMORT1992 ; SYMBOLGEN: Macro variable DSN resolves to MCMORT1992 MPRINT(READIN): INFILE "Q:\Projects\Mortality\Flat\MCMORT1992" LRECL=400 RECFM=V TRUNCOVER ; SYMBOLGEN: Macro variable YR resolves to 1992 SYMBOLGEN: Macro variable YR resolves to 1992 MLOGIC(READIN): %IF condition &yr >= 1983 and &yr <=1987 is FALSE SYMBOLGEN: Macro variable YR resolves to 1992 MLOGIC(READIN): %IF condition &yr = 1988 is FALSE SYMBOLGEN: Macro variable YR resolves to 1992 SYMBOLGEN: Macro variable YR resolves to 1992 MLOGIC(READIN): %IF condition &yr >= 1989 and &yr <=1991 is FALSE SYMBOLGEN: Macro variable YR resolves to 1992 SYMBOLGEN: Macro variable YR resolves to 1992 MLOGIC(READIN): %IF condition &yr >= 1992 and &yr <=1995 is TRUE MPRINT(READIN): input @26 REG 1. @39 POP_RES $CHAR1. @52 EDU 2. @55 DTH_MON 2. @57 DTH_DAY 2. @1 DTH_YR 2. @59 GENDER 1. @60 RACE2 2. @64 AGE_fl 1. @65 AGE_un 2. @69 AGE_GRP 2. @75 HOSP_STA2 1. @77 MAR_STAT 1. @80 HISP_OR 2. @83 DAY_DIE 1. @84 AUTOP 1. @85 BUSN 3. @88 US_JOB 3. @26 REG_OCC 1. @41 REG_RES 1. @119 ST_OCC 2. @121 CNTY_OCC $CHAR3. @124 ST_RES 2. @126 CNTY_RES $CHAR3. @141 WHR_DIE 1. @142 U_CODE $CHAR4. @164 EA_CD1 $CHAR4. @171 EA_CD2 $CHAR4. @178 EA_CD3 $CHAR4. @185 EA_CD4 $CHAR4. @192 EA_CD5 $CHAR4. @199 EA_CD6 $CHAR4. @206 EA_CD7 $CHAR4. @213 EA_CD8 $CHAR4. @220 EA_CD9 $CHAR4. @227 EA_CD10 $CHAR4. @234 EA_CD11 $CHAR4. @241 EA_CD12 $CHAR4. @248 EA_CD13 $CHAR4. @255 EA_CD14 $CHAR4. @262 EA_CD15 $CHAR4. @269 EA_CD16 $CHAR4. @276 EA_CD17 $CHAR4. @283 EA_CD18 $CHAR4. @290 EA_CD19 $CHAR4. @297 EA_CD20 $CHAR4. @341 RA_CD1 $CHAR4. @346 RA_CD2 $CHAR4. @351 RA_CD3 $CHAR4. @356 RA_CD4 $CHAR4. @361 RA_CD5 $CHAR4. @366 RA_CD6 $CHAR4. @371 RA_CD7 $CHAR4. @376 RA_CD8 $CHAR4. @381 RA_CD9 $CHAR4. @386 RA_CD10 $CHAR4. @391 RA_CD11 $CHAR4. @396 RA_CD12 $CHAR4. @401 RA_CD13 $CHAR4. @406 RA_CD14 $CHAR4. @411 RA_CD15 $CHAR4. @416 RA_CD16 $CHAR4. @421 RA_CD17 $CHAR4. @426 RA_CD18 $CHAR4. @431 RA_CD19 $CHAR4. @436 RA_CD20 $CHAR4. ; <snip> MPRINT(READIN): run;

NOTE: The infile "Q:\Projects\Mortality\Flat\MCMORT1992" is: File Name=Q:\Projects\Mortality\Flat\MCMORT1992, RECFM=V,LRECL=400

NOTE: 2179187 records were read from the infile "Q:\Projects\Mortality\Flat\MCMORT1992". The minimum record length was 400. The maximum record length was 400. One or more lines were truncated. NOTE: The data set WORK.MCMORT1992 has 146 observations and 66 variables. NOTE: DATA statement used (Total process time): real time 2:08.37 user cpu time 1:33.56 system cpu time 1.62 seconds Memory 213k


Back to: Top of message | Previous page | Main SAS-L page