LesezeichenAbonnierenRSS-Feed abonnieren
wmueller
Fluorite | Level 6

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

5 ANTWORTEN 5
AndreasMenrath
Pyrite | Level 9

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.

AndreasMenrath
Pyrite | Level 9

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

wmueller
Fluorite | Level 6

Es sieht so aus, als ob auch folgendes möglich ist:


...

%macro get_and_sort(destbib=&G_std_lib_daten.,shortid=);

...

data &destbib..&shortid;

...


Kurt_Bremser
Super User

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.

wmueller
Fluorite | Level 6

Besten Dank für die schnellen hilfreichen Antworten!

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 5 Antworten
  • 1135 Aufrufe
  • 3 Kudos
  • 3 in Unterhaltung