Guten Tag Community,
folgendes Programm versucht eine Tabelle in einer Bibliothek abzulegen (1. Zeile des Makros). Jedoch wird der Delimiter "." von &destbib übersehen.
Fügt man vor und nach dem "." je ein Leerzeichen ein, klappts. Warum, verstehe ich nicht? Weiß jemand Rat?
---------------8<---------------
libname daten "K:\Daten\unterjaehrige_QRTs\daten";
%let G_std_lib_daten=daten;
%macro get_and_sort(destbib=&G_std_lib_daten,shortid=);
data &destbib..&shortid;
set dataset;
run;
%mend get_and_sort;
data dataset;
format A_12_1 $5. B_12_3 $5. A_12_3 $5. B_12_1 $5.;
INPUT A_12_1 $ B_12_3 $ A_12_3 $ B_12_1 $;
datalines;
A 5 3 100
A 5 4 110
run;
%get_and_sort(shortid=test);
--------------->8---------------
Der Makroprozessor löst in diesem Beispiel mehrfach Makrovariablen auf. Hier sind die Zwischenergebnisse der einzelnen Verarbeitungsschritte:
&destbib..&shortid;
&G_std_lib_daten.test
datentest
Es wird somit das Dataset work.datentest erzeugt. Die kürzeste Lösung wäre also noch einen weiteren Punkt einzufügen:
data &destbib...&shortid;
Mit dieser Konstellation klappt das Beispiel, allerdings werden Fehler auftreten, wenn in dem Parameter destbib keine Makrovariablen verwendet werden.
Besser wäre daher das Makro so umzubauen:
%global G_std_lib_daten;
%let G_std_lib_daten=daten;
%macro get_and_sort(destbib=,shortid=);
%if (%length(&destbib.) eq 0) %then %do;
%let destbib = &G_std_lib_daten.;
%end;
data &destbib..&shortid;
set dataset;
run;
%mend get_and_sort;
Viele Grüße,
Andreas
Es sieht so aus, als ob auch folgendes möglich ist:
...
%macro get_and_sort(destbib=&G_std_lib_daten.,shortid=);
...
data &destbib..&shortid;
...
Das passiert übrigens nur, wenn man eine Makrovariable als Defaultwert angibt. Ist der Defaultwert ein Literal, passiert es nicht.
Auch wenn man
%get_and_sort(destbib=&G_std_lib_daten,shortid=test);
macht, funktioniert's.
Besten Dank für die schnellen hilfreichen Antworten!
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.