Sono spesso considerati superflui e la loro importanza è spesso sottovalutata. Presi come siamo dalla frenesia di scrivere codice nel più breve tempo possibile per rispettare le scadenze, l’idea di inserirli nei nostri script ci appare come un’inefficienza da minimizzare. Tuttavia, parlo per esperienza personale, se c’è una cosa sulla quale non dovremmo lesinare sforzi, attenzione e chiarezza è proprio nell’inserire nei nostri programmi quanti più commenti possibile.
I commenti in SAS System
Nel Program Editor di SAS i commenti appaiono in colore verde e possono essere inserite pressoché ovunque all’interno dei nostri script.
In SAS, esistono diversi modi per inserire commenti (o per commentare una parte di codice, inibendone l’esecuzione).
Uno di questi, “sfrutta” il fatto che tutto quanto è compreso tra i simboli “/*” e “*/” è considerato un commento!
Esempio:
/* questo è un commento */
Un altro modo di inserire un commento consiste nell’utilizzare la sintassi “*…;”.
Esempio:
* anche questo è un commento;
Detto questo, è possibile dare libero sfogo alla fantasia…:
/*
Questo è un commento
su più linee...
*/
/************************************/
/* */
/* Questo è un "SUPER" COMMENTO */
/* Versione : 1.0 */
/* Creato da : Stefano Sforza */
/* Il : 04/01/2019 */
/* Scopo : Mostrare come si possono */
/* creare diverse tipologie */
/* di commenti in SAS. */
/* */
/************************************/
/*************************************
Anche questo è un "SUPER" COMMENTO
Versione : 1.1
Creato da : Stefano Sforza
Il : 04/01/2019
Scopo : Mostrare come si possono
creare diverse tipologie
di commenti in SAS.
*************************************/
Commenti “strutturati” come i precedenti possono essere utilizzati, ad esempio, all’inizio di uno script SAS più o meno complesso per sintetizzarne le caratteristiche.
Occhio al…colore
Abbiamo detto che è possibile inserire commenti pressoché ovunque all’interno dei nostri script: all’inizio dei programmi, all’interno di passi di data o di proc, SAS è in grado di riconoscerli e di capire che si tratta di porzioni di “codice” da non eseguire.
Tuttavia, talvolta, l’inserimento di commenti all’interno di uno script SAS induce il sistema a non interpretarli correttamente. Ciò avviene quanto si tenta di “annidare” commenti, all’interno di altri commenti. Ad esempio:
* SAS non interpreta correttamente
i commenti "annidati";
DATA classBMI;
SET sashelp.class;
/* Metto in maiuscolo il nome*/
nome = upcase(name);
/* Calcolo l'altezza in metri */
/*
altezza = (height * 2.54) / 100;
/* Calcolo il peso in Kg */
peso = weight * 0.45;
BMI = peso / (altezza**2);
*/
RUN;
Ora, nelle intenzioni del programmatore, SAS avrebbe dovuto limitarsi a “mettere in maiuscolo” il nome degli studenti, ignorando tutto il resto del codice. La porzione di script:
peso = weight * 0.45;
BMI = peso / (altezza**2);
infatti, avrebbe dovuto far parte di un unico commento che comprende anche la riga:
altezza = (height * 2.54) / 100;
Tuttavia, questo modo di commentare il codice “annidando” un commento dentro ad un altro, non è correttamente interpretato da SAS e una spia di questo problema è dato dal colore della parte di codice che, pur dovendo essere commentata, non è verde.
Le righe che creano le variabili peso e BMI, infatti, non sono interpretate come commenti, ma come codice vero e proprio che SAS compila ed esegue.
In effetti, avrai già capito che il problema è dovuto a questo commento:
/* Calcolo il peso in Kg */
inserito all’interno di un altro commento più “esterno”.
E allora, che fare? Beh, un modo semplice per ovviare al problema potrebbe essere il seguente:
*...alternativa corretta...;
DATA classBMI;
SET sashelp.class;
/* Metto in maiuscolo il nome*/
nome = upcase(name);
/* Calcolo l'altezza in metri */
* altezza = (height * 2.54) / 100;
/* Calcolo il peso in Kg */
* peso = weight * 0.45;
* BMI = peso / (altezza**2);
RUN;
In questo modo SAS è in grado di distinguere correttamente le parti di codice commentate da quelle da eseguire.
Commenti e linguaggio MACRO
Un altro modo per commentare una parte di codice SAS sfrutta le “proprietà” del linguaggio SAS MACRO. Proviamo a riprendere il caso precedente e “commentiamo” la parte di codice “problematica” utilizzando una MACRO:
/* Puoi sfruttare il linguaggio MACRO
per inibire l'esecuzione di porzioni
codice...questo equivale a commentarle ;-) */
DATA classBMI;
SET sashelp.class;
/* Metto in maiuscolo il nome*/
nome = upcase(name);
%MACRO NO;
/* Calcolo l'altezza in metri */
altezza = (height * 2.54) / 100;
/* Calcolo il peso in Kg */
peso = weight * 0.45;
BMI = peso / (altezza**2);
%MEND NO;
RUN;
Come vedi, abbiamo utilizzato la %MACRO NO (ovviamente, avremmo potuto utilizzare qualsiasi nome di nostro gradimento. Io di solito uso: NO, SKIP, SALTA, COMMENTO,…) per “inglobare” una porzione di codice. È evidente che se la macro in questione non viene mai invocata con %NO, il codice in esso contenuto non sarà mai eseguito. Hai già intuito che questo workaround equivale a commentare il codice che desideriamo by-passare.
Trovo questo modo estremamente comodo per “commentare” larghe porzione di codice, superando il problema di eventuali commenti “annidati”. L’unica accortezza consiste nel rispettare le regole sintattiche di SAS. Ad esempio, sarebbe stato un errore chiudere la macro posizionando %MEND NO; dopo RUN;.
Ti vengono in mente altri modi per ottenere lo stesso risultato?
SAS e tutti gli altri nomi di prodotti e servizi di SAS Institute Inc. sono marchi registrati di SAS Institute Inc. negli USA e in altri paesi. ® indica la registrazione negli USA.