LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (January 2008, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
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


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