SAS ha una potente funzione di programmazione chiamata Macros che ci permette di evitare sezioni ripetitive di codice e di usarle ripetutamente quando necessario. Aiuta anche a creare variabili dinamiche all’interno del codice che possono assumere valori diversi per diverse istanze di esecuzione dello stesso codice. Le macro possono anche essere dichiarate per blocchi di codice che saranno riutilizzati più volte in modo simile alle variabili macro. Le vedremo entrambe negli esempi seguenti.
Variabili macro
Sono le variabili che contengono un valore da utilizzare più volte in un programma SAS. Sono dichiarate all’inizio di un programma SAS e richiamate successivamente nel corpo del programma. Possono essere globali o locali.
Variabile macro globale
Sono chiamate variabili macro globali perché sono accessibili a qualsiasi programma SAS disponibile nell’ambiente SAS. In generale sono le variabili assegnate al sistema che sono accessibili da più programmi. Un esempio generale è la data di sistema.
Esempio
Di seguito un esempio della variabile SAS chiamata SYSDATE che rappresenta la data di sistema. Si consideri uno scenario per stampare la data di sistema nel titolo del rapporto SAS ogni giorno in cui il rapporto viene generato. 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 di cui sopra viene eseguito, otteniamo il seguente output.
Variabile macro locale
Queste variabili possono essere accessibili dai programmi SAS in cui sono dichiarate come parte del programma. Sono tipicamente usate per fornire diverse variabili alle stesse istruzioni SAS in modo che possano elaborare diverse osservazioni di un insieme di dati.
Sintassi
Le variabili locali sono decalcate con la seguente sintassi.
% LET (Macro Variable Name) = Value;
Qui il campo Valore può prendere qualsiasi valore numerico, testo o data come richiesto dal programma. Il nome della variabile Macro è una qualsiasi variabile SAS valida.
Esempio
Le variabili sono utilizzate dalle istruzioni SAS utilizzando il carattere & aggiunto all’inizio del nome della variabile. Il programma seguente ci dà tutte le osservazioni della marca ‘Audi’ e del tipo ‘Sport’. Se vogliamo il risultato di una marca diversa, dobbiamo cambiare il valore della variabile make_name senza cambiare nessun’altra parte del programma. Nel caso di portare programmi questa variabile può essere riferita ancora e ancora in qualsiasi dichiarazione 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 il codice di cui sopra viene eseguito si ottiene lo stesso risultato del programma precedente. Ma cambiamo il nome del tipo in ‘Wagon’ ed eseguiamo 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 in un programma ovunque, usando quel nome. Inizia con un’istruzione %MACRO e termina con l’istruzione %MEND.
Sintassi
Le variabili locali sono dichiarate con la seguente sintassi.
# Creating a Macro program.%MACRO <macro name>(Param1, Param2,….Paramn);Macro Statements;%MEND;# Calling a Macro program.%MacroName (Value1, Value2,…..Valuen);
Esempio
Il seguente programma dichiara un gruppo di istruzioni SAT sotto una macro chiamata ‘show_result’; questa macro è 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 di cui sopra viene eseguito si ottiene il seguente output.
Macro comunemente usate
SAS ha molte istruzioni MACRO che sono incorporate nel linguaggio di programmazione SAS. Sono usate da altri programmi SAS senza dichiararle esplicitamente. Esempi comuni sono: terminare un programma quando si verifica una condizione o catturare il valore di una variabile nel log del programma. Di seguito sono riportati alcuni esempi.
Macro %PUT
Questa istruzione macro scrive informazioni di testo o variabili macro nel registro SAS. Nell’esempio seguente il valore della variabile ‘today’ viene scritto nel log del programma.
data _null_;CALL SYMPUT ('today',TRIM(PUT("&sysdate"d,worddate22.)));run;%put &today;
Quando il codice di cui sopra viene eseguito si ottiene il seguente output.
Macro %RETURN
L’esecuzione di questa macro causa la normale terminazione della macro in esecuzione quando una certa condizione è 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 di cui sopra viene eseguito si ottiene il seguente output.
Macro %END
Questa definizione macro contiene un ciclo %DO %WHILE che termina, come richiesto, con una dichiarazione %END. Nell’esempio seguente la macro chiamata test prende un input dall’utente ed esegue il ciclo DO usando questo valore di input.La fine del ciclo DO si ottiene attraverso l’istruzione %end mentre la fine della macro si ottiene attraverso 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 di cui sopra viene eseguito si ottiene il seguente output.