Neu hier, also wenn ich etwas falsch gemacht habe, entschuldige ich mich. Ich bin auch ein neuer Benutzer von SAS.SAS - Ein Makro nach einem proc sql namens in einem Makro
Ich habe ein Makro erstellt, das zuerst eine proc sql aufruft, die eine bestimmte Tabelle erstellt, die ich an ein anderes Makro übergeben möchte (innerhalb des ersten Makros).
%Macro Mc_Copy_Table (TABLE_NAME);
proc sql;
create table &TABLE_NAME as
select *
from OR_IN.&TABLE_NAME;
connect using OR_OUT;
execute (truncate table &TABLE_NAME) By OR_OUT;
disconnect from OR_OUT;
quit;
%MC_obsnvars(&TABLE_NAME);
%put &Nobs;
%if &Nobs > 100000 %then
%do; /* use of the sql loader */
proc append base = OR_OU. &TABLE_NAME (&BULKLOAD_OPTION)
data = &TABLE_NAME;
run;
%end;
%else
%do;
proc append base = OR_OU. &TABLE_NAME (Insertbuff=10000)
data = &TABLE_NAME;
run;
%end;
%Mend Mc_Copy_Table;
Die Mc_Obsnvars Makro Verwendung der attrn
Funktion die Anzahl der Beobachtungen aus dem gegebenen Datensatz (es öffnet den Datensatz zuerst) zu erhalten. Je nach Anzahl der Beobachtungen benutzt mein Programm entweder den sqloader oder nicht. OR_IN und OR_OUT sind Libnamen (Oracle-Engine).
Wenn das Makro Mc_Copy_Table ausgeführt wird, mit zum Beispiel TABLE1 als Argument, wird zuerst Mc_Obsnvars ausgeführt, das versucht, TABLE1 zu öffnen, das noch nicht existiert. Der proc sql wird anschließend ausgeführt.
Warum wird das Makro vor der proc sql
ausgeführt? und gibt es eine Möglichkeit, die proc sql
zuerst ausgeführt werden? Setzen Sie den proc sql
Teil in ein Makro, löst das Problem nicht. Danke :)
Wenn ich Ihre Frage verstanden, Sie Proc Sql erste und Zeit ausführen wollen, dann Anzahl der Beobachtungen berechnen. Wenn das korrekt ist, benötigen Sie keine zwei Makros. Bitte entfernen Sie% Mc_Obsnvars (& TABLE_NAME) und führen Sie Ihren Code aus. –
Gibt es ein Semikolon zum Beenden der Anweisung 'create table' vor dem Makroaufruf? Wenn nicht, wird die% Mc_Obsnvars() ausgeführt, bevor die 'create table' ausgeführt wird. Wo endet Ihr PROC SQL-Schritt? Ist% Mc_Obsnavars() auch ein SAS-Code oder füllt er nur eine Makrovariable? – Quentin
Ich habe den Code bearbeitet, um es klarer zu machen. Danke für deine Antworten. – Spoutnik