SAS - Macro

SAS ha una potente funzione di programmazione chiamata Macrosche ci consente di evitare sezioni ripetitive di codice e di utilizzarle più e più volte quando necessario. Aiuta anche a creare variabili dinamiche all'interno del codice che possono assumere valori diversi per istanze di esecuzione diverse dello stesso codice. Le macro possono anche essere dichiarate per blocchi di codice che verranno riutilizzati più volte in modo simile alle variabili macro. Vedremo entrambi questi negli esempi seguenti.

Variabili macro

Queste sono le variabili che contengono un valore da utilizzare ancora e ancora da un programma SAS. Vengono dichiarati all'inizio di un programma SAS e richiamati successivamente nel corpo del programma. Possono essere di portata globale o locale.

Variabile Macro globale

Sono chiamate variabili macro globali perché possono accedervi da qualsiasi programma SAS disponibile nell'ambiente SAS. In generale sono le variabili assegnate dal sistema a cui si accede da più programmi. Un esempio generale è la data di sistema.

Esempio

Di seguito è riportato un esempio della variabile SAS denominata SYSDATE che rappresenta la data di sistema. Considerare uno scenario per stampare la data di sistema nel titolo del report SAS ogni giorno in cui viene generato il report. Il titolo mostrerà la data e il giorno correnti senza che noi codifichiamo alcun valore per loro. Usiamo il set di dati SAS integrato chiamato CARS disponibile nella libreria SASHELP.

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Variabile Macro locale

È possibile accedere a queste variabili dai programmi SAS in cui sono dichiarate come parte del programma. Sono tipicamente utilizzati per fornire diverse variabili alle stesse istruzioni SAS sl che possono elaborare diverse osservazioni di un set di dati.

Sintassi

Le variabili locali sono contrassegnate con la sintassi seguente.

% LET (Macro Variable Name) = Value;

Qui il campo Valore può assumere qualsiasi valore numerico, di testo o di data come richiesto dal programma. Il nome della variabile macro è qualsiasi variabile SAS valida.

Esempio

Le variabili vengono utilizzate dalle istruzioni SAS utilizzando l'estensione & carattere aggiunto all'inizio del nome della variabile. Di seguito il programma ci fornisce tutte le osservazioni del marchio "Audi" e del tipo "Sport". Nel caso in cui vogliamo il risultato didifferent make, dobbiamo modificare il valore della variabile make_namesenza modificare nessun'altra parte del programma. In caso di programmi bring, questa variabile può essere riferita ripetutamente in qualsiasi istruzione SAS.

%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

Quando viene eseguito il codice precedente, otteniamo lo stesso output del programma precedente. Ma cambiamo il filetype name per 'Wagon'ed eseguire lo stesso programma. Otterremo il risultato seguente.

Programmi macro

Macro è un gruppo di istruzioni SAS a cui si fa riferimento con un nome e per usarlo nel programma ovunque, utilizzando quel nome. Inizia con un'istruzione% MACRO e termina con l'istruzione% MEND.

Sintassi

Le variabili locali sono dichiarate con la sintassi seguente.

# Creating a Macro program.
%MACRO <macro name>(Param1, Param2,….Paramn);

Macro Statements;

%MEND;

# Calling a Macro program.
%MacroName (Value1, Value2,…..Valuen);

Esempio

Il programma seguente rimuove un gruppo di staemnets SAT sotto una macro denominata 'show_result'; Questa macro viene chiamata da altre istruzioni SAS.

%MACRO show_result(make_ , type_);
proc print data = sashelp.cars;
where make = "&make_" and type = "&type_" ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
%MEND;

%show_result(BMW,SUV);

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Macro di uso comune

SAS ha molte istruzioni MACRO integrate nel linguaggio di programmazione SAS. Sono utilizzati da altri programmi SAS senza dichiararli esplicitamente. Esempi comuni sono: terminare un programma quando viene soddisfatta una condizione o acquisire il valore di runtime di una variabile nel registro del programma. Di seguito sono riportati alcuni esempi.

Macro% PUT

Questa istruzione macro scrive testo o informazioni sulle variabili macro nel registro SAS. Nell'esempio seguente il valore della variabile "oggi" viene scritto nel registro del programma.

data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Macro% RETURN

L'esecuzione di questa macro causa la normale chiusura della macro attualmente in esecuzione quando una determinata condizione risulta essere vera. Nell'esempio seguente quando il valore della variabile"val" diventa 10, la macro termina altrimenti continua.

%macro check_condition(val);
   %if &val = 10 %then %return;

   data p;
      x = 34.2;
   run;  

%mend check_condition;  

%check_condition(11)  ;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Macro% END

Questa definizione di macro contiene un file %DO %WHILEciclo che termina, come richiesto, con un'istruzione% END. Nell'esempio seguente, la macro denominata test accetta un input dell'utente ed esegue il ciclo DO utilizzando questo valore di input. La fine del ciclo DO viene raggiunta tramite l'istruzione% end mentre la fine della macro viene raggiunta tramite l'istruzione% mend.

%macro test(finish);
   %let i = 1;
   %do %while (&i <&finish);
      %put the value of i is &i;
      %let i=%eval(&i+1);
   %end;
%mend test;
%test(5)

Quando il codice precedente viene eseguito, otteniamo il seguente output.