| Date: | Mon, 14 Jan 2008 18:11:41 -0500 |
| Reply-To: | "Long, Stuart (NIH/NIEHS) [C]" <long3@NIEHS.NIH.GOV> |
| Sender: | "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU> |
| From: | "Long, Stuart (NIH/NIEHS) [C]" <long3@NIEHS.NIH.GOV> |
| Subject: | Problem with CALL EXECUTE |
| In-Reply-To: | A<a02ed35d-6242-4ca3-8762-7abe9dd4908f@q77g2000hsh.googlegroups.com> |
| Content-Type: | text/plain; charset="US-ASCII" |
Hi all:
I have a problem with generating a workable macro invocation using
CALL EXECUTE. The macro works just fine if it is invoked directly. I
have removed quite a bit of extra code that would cloud up the issue and
left only the code which seems to be pertinent to the problem.
Any ideas as to why this isn't working would be appreciated.
PROBLEM: &datasets is empty within the summaryset macro using the CALL
EXECUTE method
&datasets contains the value "SUMMARY_" within the summaryset macro when
the macro is invoked directly.
%MACRO summaryset(setlist = );
%LOCAL datasets;
PROC SQL NOPRINT ;
SELECT TRIM(LIBNAME) || "." || MEMNAME
INTO :datasets SEPARATED BY " "
FROM DICTIONARY.TABLES
WHERE LIBNAME = "WORK" AND
MEMNAME LIKE UPCASE("&setlist%");
QUIT ;
%PUT datasets = &datasets;
%MEND summaryset;
DATA SUMMARY_;
x=1;
RUN;
%MACRO callexecute;
DATA _NULL_;
CALL EXECUTE ('%summaryset( setlist = SUMMARY_)' );
RUN;
%MEND callexecute;
/* this doesn't work */
%callexecute
/* this works */
%summaryset(setlist = SUMMARY_)
6039 %MACRO summaryset(setlist = );
6040 %LOCAL datasets;
6041
6042 PROC SQL NOPRINT ;
6043 SELECT TRIM(LIBNAME) || "." || MEMNAME
6044 INTO :datasets SEPARATED BY " "
6045 FROM DICTIONARY.TABLES
6046 WHERE LIBNAME = "WORK" AND
6047 MEMNAME LIKE UPCASE("&setlist%");
6048 QUIT ;
6049 %PUT datasets = &datasets;
6050
6051 %MEND summaryset;
6053
6054 %MACRO callexecute;
6055 DATA _NULL_;
6056 CALL EXECUTE ('%summaryset( setlist = SUMMARY_)'
);
6057 RUN;
6058 %MEND callexecute;
6059 DATA SUMMARY_;
6060 x=1;
6061 RUN;
NOTE: The data set WORK.SUMMARY_ has 1 observations and 1 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
6062
6063 %callexecute
MLOGIC(CALLEXECUTE): Beginning execution.
MPRINT(CALLEXECUTE): DATA _NULL_;
MPRINT(CALLEXECUTE): CALL EXECUTE ('%summaryset( setlist =
SUMMARY_)' );
MPRINT(CALLEXECUTE): RUN;
MLOGIC(SUMMARYSET): Beginning execution.
MLOGIC(SUMMARYSET): Parameter SETLIST has value SUMMARY_
MLOGIC(SUMMARYSET): %LOCAL DATASETS
MPRINT(SUMMARYSET): PROC SQL NOPRINT ;
SYMBOLGEN: Macro variable SETLIST resolves to SUMMARY_
MPRINT(SUMMARYSET): SELECT TRIM(LIBNAME) || "." || MEMNAME INTO
:datasets SEPARATED BY " "
FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE
UPCASE("SUMMARY_%");
MPRINT(SUMMARYSET): QUIT ;
MLOGIC(SUMMARYSET): %PUT datasets = &datasets
SYMBOLGEN: Macro variable DATASETS resolves to
datasets =
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
MLOGIC(SUMMARYSET): Ending execution.
NOTE: CALL EXECUTE generated line.
1 + PROC SQL NOPRINT ;
MPRINT(CALLEXECUTE): PROC SQL NOPRINT ;
1 + SELECT TRIM(LIBNAME) || "." || MEMNAME
INTO :datasets
SEPARATED BY " " FROM DICTIONARY.TABLES WHERE LIBNAME =
"WORK" AND
MEMNAME LIKE UPCASE("SUMMARY_%");
MPRINT(CALLEXECUTE): SELECT TRIM(LIBNAME) || "." || MEMNAME INTO
:datasets SEPARATED BY " "
FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE
UPCASE("SUMMARY_%");
1 +
QUIT ;
MPRINT(CALLEXECUTE): QUIT ;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
MLOGIC(CALLEXECUTE): Ending execution.
6064
MLOGIC(SUMMARYSET): Beginning execution.
6065 %summaryset(setlist = SUMMARY_)
MLOGIC(SUMMARYSET): Parameter SETLIST has value SUMMARY_
MLOGIC(SUMMARYSET): %LOCAL DATASETS
MPRINT(SUMMARYSET): PROC SQL NOPRINT ;
SYMBOLGEN: Macro variable SETLIST resolves to SUMMARY_
MPRINT(SUMMARYSET): SELECT TRIM(LIBNAME) || "." || MEMNAME INTO
:datasets SEPARATED BY " "
FROM DICTIONARY.TABLES WHERE LIBNAME = "WORK" AND MEMNAME LIKE
UPCASE("SUMMARY_%");
MPRINT(SUMMARYSET): QUIT ;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
MLOGIC(SUMMARYSET): %PUT datasets = &datasets
SYMBOLGEN: Macro variable DATASETS resolves to WORK.SUMMARY_
datasets = WORK.SUMMARY_
MLOGIC(SUMMARYSET): Ending execution.
Stuart Long
Contractor
Westat
Senior Analyst
919-941-8307
|