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
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>