Frage

Gibt es eine kurze Möglichkeit, alle Makrovariablen in einem Makro -globalen Umfang erstellt zu haben?

dh:

%macro x;  
 %global _all_;  * ??? ;  
 %let x=1;  
 %let y=1;  
 %let z=1;  
%mend;
War es hilfreich?

Lösung

Ich kann mir nur vorstellen, dass ich dies tun kann, ohne jedes Makro als global im Voraus deklarieren zu müssen, und dann eine % -LET -Aussage besteht darin, ein Makro zu verwenden anstelle von Die %let Erklärung.

Im folgenden Code erstelle ich ein Makro auf dem Namen %mylet Dies hat als einziger Zweck die Aufgabe, eine globale Variable mit dem Namen und dem Wert zu erstellen, den ich als Argumente verabschiedet. Ich verwende dieses Makro anstelle von %let überall, wo ich globale Variablen definieren möchte.

z.B.

%global myvar;
%let myvar=2;

würde werden...

%mylet(myvar,2);

/* Define a macro to declare variables as global */
%macro mylet(var,value);
  %global &var;
  %let &var.= &value ;
%mend;

/* Test macro */
%macro test;
 %mylet(myvar,2);
 %mylet(myvar2,12);
 %mylet(myvar3,'string');

/* see that they are global inside the macro */
title "Macro scope inside test macro";
proc sql;
    select *
       from dictionary.macros
       where name in('MYVAR','MYVAR2','MYVAR3');
quit;

%mend;
%test;

/* Check to see if they are still global outside the macro */
title "Macro scope outside test macro";
proc sql;
    select *
       from dictionary.macros
       where name in('MYVAR','MYVAR2','MYVAR3');
quit;

Andere Tipps

Wenn Sie die Makrovariable in offenem Code erstellen, wird die Makrovariable automatisch zur globalen Makrosymbol -Tabelle hinzugefügt:

%let x=1;  
%let y=1;  
%let z=1; 

Das wäre Vor Sie erstellen das größere Makro:

%macro x;
  <code here>
%mend x;

Eine andere Alternative wäre, die Variablen mit einem Datenschritt zu erstellen:

data _null_;
    set LIB.DSET;
    x = 1;
    call symput('x',x);
run;

Wenn Sie Makrovariablen innerhalb eines Datenschritts erstellen und dieser Datenschritt in einem Makro befindet, sind die erstellten Makrovariablen standardmäßig lokal im Bereich dieses Makros.

Verwenden

call symputx('macvar',macval,'g'); 

So erstellen Sie globale Makrovariablen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top