Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Occasional Contributor
Beiträge: 15
Punkt als Delimeter einer Makrovariablen

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

Frequent Contributor
Beiträge: 121
Re: Punkt als Delimeter einer Makrovariablen

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.

Frequent Contributor
Beiträge: 121
Re: Punkt als Delimeter einer Makrovariablen

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

Occasional Contributor
Beiträge: 15
Re: Punkt als Delimeter einer Makrovariablen

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


...

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

...

data &destbib..&shortid;

...


Super User
Beiträge: 7.444
Re: Punkt als Delimeter einer Makrovariablen

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.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor
Beiträge: 15
Re: Punkt als Delimeter einer Makrovariablen

Besten Dank für die schnellen hilfreichen Antworten!