| Date: | Wed, 30 Dec 1998 16:36:31 -0500 |
| Reply-To: | James Carter <jcarter@SCTCORP.COM> |
| Sender: | "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU> |
| From: | James Carter <jcarter@SCTCORP.COM> |
| Subject: | Macro params > 200 chars long...resolved! |
| Content-type: | text/plain; charset=us-ascii |
|---|
Thanks to all who responded on my macro parameter question - all
good replies. Special thanks to Jack Hamilton - the use of "IN"
is a winner for me!
My original "problem" code:
%MACRO MAC(VARLIST=,FLAG=);
DATA _NULL_;
GOTIT = 0;
IF INDEX("&VARLIST","VARNAME5") > 0 THEN GOTIT = 1;
IF GOTIT THEN DO;
PUT "GOT IT!";
END;
RUN;
%MEND;
%MAC( VARLIST=VARNAME1 VARNAME2 VARNAME3 VARNAME4 VARNAME5,
FLAG=1 );
And the same code, now fixed using "IN" and a macro loop to
create the quoted
look-up string:
%MACRO MAC(VARLIST=,FLAG=);
%let n=1;
%let varqlist=;
%let word=%qscan(&varlist,&n);
%do %while (&word ne);
%let varqlist = &varqlist "&word";
%let n=%eval(&n+1);
%let word=%qscan(&varlist,&n);
%end;
DATA _NULL_;
GOTIT = 0;
TEMP = "VARNAME49";
IF TEMP IN (&varqlist) THEN GOTIT = 1;
IF GOTIT THEN DO;
PUT "GOT IT!";
END;
RUN;
%MEND;
%MAC( VARLIST=VARNAME1 VARNAME2 VARNAME3 VARNAME4 VARNAME5
VARNAME6 VARNAME7 VARNAME8 VARNAME9 VARNAME10 VARNAME11 VARNAME12
VARNAME13
VARNAME14 VARNAME15 VARNAME16 VARNAME17 VARNAME18 VARNAME19
VARNAME20 VARNAME21
VARNAME14 VARNAME15 VARNAME16 VARNAME17 VARNAME18 VARNAME19
VARNAME20 VARNAME21
VARNAME22 VARNAME23 VARNAME24 VARNAME25 VARNAME26 VARNAME27
VARNAME28 VARNAME29
VARNAME30 VARNAME31 VARNAME32 VARNAME33 VARNAME34 VARNAME35
VARNAME36 VARNAME37
VARNAME38 VARNAME39 VARNAME40 VARNAME41 VARNAME42 VARNAME43
VARNAME44 VARNAME45
VARNAME46 VARNAME47 VARNAME48 VARNAME49 VARNAME50, FLAG=1 );
This is just absolutely too cool! Good old SAS...
Thanks again to all -- and Happy New Year!
Jim Carter
|