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 (June 1999, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Fri, 11 Jun 1999 16:57:40 -0400
Reply-To:     WHITLOI1 <WHITLOI1@WESTAT.COM>
Sender:       "SAS(r) Discussion" <SAS-L@UGA.CC.UGA.EDU>
From:         WHITLOI1 <WHITLOI1@WESTAT.COM>
Subject:      Re: Problem mit SQL in Makros
Comments: To: Ingo Langner <I.Langner@DKFZ-HEIDELBERG.DE>
Content-Type: text/plain; charset=US-ASCII

Subject: Problem mit SQL in Makros Summary: Extra seimcolons cause problems. Respondent: Ian Whitlock <westat.com>

Ingo Langner <I.Langner@DKFZ-HEIDELBERG.DE> fragt

Ich habe ein kleines Programmierproblem:

Verwendung von Globalvariablenoder Makroaufrufen in SQL innerhalb eines Makros. Eine SQL-Procedure soll mehrer Datendateien bearbeiten; die Dateinamen werden in der ersten %LET...-Zeile aufgef|hrt. Mit einer Makro-Schleife sollen diese dann abgearbeitet werden. Beispiel 1a (siehe unten) ist so lauffdhig. Sobald aber die WHERE...-Zeile (Beispiel 1b) in die SQL-Procedure eingef|gt wird, wird von SAS die Globalvariable angemeckert, ich nehme an, weil durch die fehlenden Zeilenbegrenzugne SAS nicht mehr zwischen Globalvariablennamen und Befehlssyntax differenzieren kann. Gibt es eine Mvglichkeit, das Ende des Globalvariablennamens oder das Ende eines Makroaufrufes zu markieren? Oder hat jemand andere Vorschldge?

Beispiel 1a:

%LET text1=text_A text_B text_C; %LET anzahl=b; %MACRO les1; %SCAN(&text1, &i, ' '); <<<<<<<<<<<<< Ihren Problem, solte kein semi-colon. %MEND les1; %MACRO run1; %DO i=1 %TO &anzahl; PROC SQL; SELECT * FROM lib.%les1 ; QUIT; %END; %MEND run1; %run1;

Beispiel 1b:

%LET text1=text_A text_B text_C; %LET anzahl=b; %MACRO les1; %SCAN(&text1, &i, ' '); %MEND les1; %MACRO run1; %DO i=1 %TO &anzahl; PROC SQL; SELECT * FROM lib.v1 WHERE v1=a ; QUIT; %END; %MEND run1; %run1;

Apparently Ingo wants to execute a WHERE clause in Beispiel 1a. It doesn't work because the macro, LES1 called by RUN1 generates an extra semicolon in the middle of the SQL statement. The fix is

%MACRO les1; %SCAN(&text1, &i, ' ') /* keine semi-colon */ %MEND les1;

Ian Whitlock <whitloi1@westat.com>


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