SlideShare a Scribd company logo
1 of 92
Corso SAS
SAS Base & Macro
Arun Kumar Ram
05 Agosto 2019
© Copyright. Tutti i diritti sono riservati.
Interfaccia SAS
Finestra Editor
Finestra
Explorer
Finestra Log
Esegui codiceSalva
Finestra Risultati
Task Manager
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati.
2
Programmi SAS
 E’ una sequenza di passi finalizzata generalmente a creare un dataset.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 3
Programmi SAS
 I passi SAS sono:
 DATA
 PROC
 I passi SAS terminano con:
 run;
 quit;
 I programmi SAS possono essere eseguiti in modalità:
 Interattiva
 Batch
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 4
Log programmi SAS
 LOG-->contiene informazioni sui step eseguiti, errori e warning inclusi.
 Posizionandosi sulla pagina del log, cliccando il ‘foglio bianco’(1) è possibile
ripulire il log e partire da una situazione pulita.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 5
1
Visualizzare informazione dataset
 Facendo tasto destro-->Properties
su una tabella, è possibile
visualizzare dettagli come il
numero di righe, colonne, indici,
data modifica e creazione, ecc…
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 6
Regole di sintassi
 Le istruzioni SAS iniziano con una parola chiave(es. DATA o PROC)
 Terminano con un punto e virgola
 L’indentazione del codice non è obbligatoria, ma di aiuto per la lettura del
codice
 Una stessa riga può contenere più istruzioni
 Un’istruzione può estendersi su più righe
 I commenti su più righe si racchiudono tra /* e */
 I commenti su una riga si possono fare con * e ;
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 7
Tipi di variabili
Vi sono 2 tipi di variabili:
 Alfanumeriche: possono contenere
caratteri, numeri, caratteri
speciali e hanno una lunghezza
massima di 32,767 bytes
 Numeriche: hanno una lunghezza
predefinita in 8 bytes anche se non
si è limitati a 8 cifre.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 8
Variabili di tipo Date
 In SAS non esistono campi di tipo Date. I campi che appaiono come date in
realtà sono numeri a cui è stato applicato un formato di tipo data.
 Inoltre, in SAS "l’anno" 0 è il 1 gennaio 1960.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 9
Valori mancanti
Campo carattere non
valorizzato(vuoto)
Campo numerico non
valorizzato(.)
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 10
Nomi variabili e dataset
 Gli standard per i nomi delle variabili e dei dataset sono uguali.
 Lunghezza massima di 32 caratteri
 Deve iniziare con un carattere(a-z) o un underscore(_)
 Può continuare con caratteri, numeri o underscore
 Nel caso il nome non sia valido, un errore verrà stampato nel log.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 11
Librerie SAS
 È una collezione di file SAS, che
vengono referenziati con un nome
logico(libref).
ES. sashelp.class
 Una libreria può essere
temporanea(work) o permanente.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 12
LIBNAME
 Per allocare una libreria si usa la libname.
 La libref seguo lo stesso standard di nomenclatura delle variabili dei dataset,
unica differenze è che il nome non può superare i 8 caratteri.
 Nel log si può verificare se la libreria è stata correttamente allocata o meno.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 13
Istruzione DATA
 Per creare un dataset basta scrivere:
 Casi particolari:
 Se non si specifica il nome del ds, la prima volta verrà creato il ds DATA1, poi
DATA2 e cos’ via…
 Se non si vuole creare alcun dataset, basta scrivere _NULL_ al posto del nome del
dataset.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 14
Istruzione SET
 Per creare un dataset utilizzando un dataset SAS come input bisogna
utilizzare
 Di base, con l’istruzione SET si leggono tutti i record e tutte le variabili.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 15
Creazione di nuove variabili
 Per creare una nuova variabile devo usare l’istruzione di assegnazione.
Es. creo la variabili newvar e la valorizzo con un numero fisso.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 16
Operatori SAS
Simbolo Definizione
** Elevamento a
potenza
* Moltiplicazione
/ Divisione
+ Addizione
- Sottrazione
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 17
Costanti SAS
 In SAS si possono definire delle costanti, e si possono anche usare per creare nuove
variabili.
 Stringa
 ’Ciao’
 "CASA"
 Numeriche
 10
 3.14
 Data
 ’30Aug1997’d
 ’30Aug1997:13:15:00.00’DT
N.B. E’ importante specificare la d o dt in caso di costanti di tipo data o datetime.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 18
Operatori di confronto
 Vengono usati per l’esecuzione condizionale.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 19
Simbolo Significato
= Uguale a
^= Diverso da
> Maggiore di
< Minore di
>= Maggiore o uguale di
<= Minore o uguale di
Operatori logici
 Vengono usati nelle espressioni, per concatenare delle condizioni.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 20
Simbolo Significato
& AND
| OR
! OR
¬ NOT
ˆ NOT
~ NOT
Esecuzione condizionale
 Per l’esecuzione condizionale, bisogna specificare una condizione. Se questa
condizione è vera si esegue una certa istruzione. In caso contrario, si può
eseguire una istruzione diversa o non eseguirne alcuna.
 La sintassi generale è:
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 21
Istruzione LENGTH
 Serve per definire la lunghezza di una variabile.
 Se la lunghezza definita è troppo corta, i dati verranno troncati(vedi es.
sotto)
 La posizione in cui si utilizza l’istruzione è importante. Dato che il campo
name è già presente nel ds sashelp.class, la length specificata prima
dell’istruzione vince su quella ereditata dal dataset.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 22
Istruzione DO/END
 DO/END vengono utilizzati per eseguire un gruppo di istruzioni in maniera
condizionale.
 Di seguito la sintassi. Il ramo ELSE non è obbligatorio.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 23
Esecuzione Condizionale con SELECT
 Un altro modo per eseguire istruzioni in maniera condizionale è utilizzare
SELECT.
 L’istruzione OTHERWISE è facoltativa, si può specificare vuota. Nel caso in cui
venga omessa e tutte le condizioni precedenti risultino false, verrà generato
un errore.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 24
KEEP
 Serve per selezionare le variabili da mantenere. Si può utilizzare in diversi
punti.
 A seconda di dove viene utilizzata, cambia il numero di variabili lette, e di
conseguenza le performance.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 25
DROP
 Serve per selezionare le variabili da cancellare. Si può utilizzare in diversi
punti.
 A seconda di dove viene utilizzata, cambia il numero di variabili lette, e di
conseguenza le performance.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 26
Selezione di osservazioni: IF
 Per selezionare i record da scrivere in un dataset SAS, si può utilizzare
l’istruzione IF.
 Se la condizione specificata sarà vera, il record verrà scritto nel dataset.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 27
Selezione di osservazioni: DELETE
 Per selezionare i record da NON scrivere in un dataset SAS, si può utilizzare
l’istruzione DELETE.
 Se la condizione specificata sarà vera, il record NON verrà scritto nel dataset.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 28
Selezione di osservazioni: WHERE
 Per selezionare i record da leggere, si può utilizzare l’istruzione WHERE.
 Se la condizione specificata sarà vera, il record verrà letto.
 Nella espressione da verificare, si possono specificare solo variabili presenti
nel dataset di input, non variabili calcolate nel step corrente.
 È molto più performante di una IF.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 29
Istruzione PUT
 Scrive informazioni nel log ed è utile in fase di test/debug.
put ‘testo’;
put nome-variabile=;
put _all_;
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 30
Funzioni: SUBSTR()
 Estrae da una stringa, n caratteri(specificati nel 3° argomento) a partire dalla
posizione indicata(2° argomento).
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 31
Funzioni: SCAN()
 Estrae da una stringa, la parola in posizione n, in base ai delimitatori
specificati.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 32
Funzioni: LENGTH()
 Ritorna il numero di caratteri di una stringa, escludendo gli spazi in coda.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 33
Funzioni: TRIM()
 Elimina gli spazi in coda da una stringa.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 34
Funzioni: CATX()
 Concatena stringhe, rimuovendo spazi in testa e in coda.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 35
Funzioni: STRIP()
 Rimuove tutti gli spazi in testa e in coda.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 36
Funzioni: COMPRESS()
 Rimuove tutti gli spazi.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 37
Funzioni: LEFT() e RIGHT()
 Allineano a sinistra o a destra una stringa.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 38
Funzioni: UPCASE() e LOWCASE()
Upcase() Lowcase()
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 39
Funzioni: INDEX()
 Ritorna la posizione di una stringa all’interno di un’altra stringa.
 Se la stringa ricercata non esiste, ritorna 0.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 40
Funzioni: INT()
 Restituisce la parte intera di un valore numerico.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 41
Funzioni: ROUND()
 Restituisce un numero arrotondato.
 È anche possibile specificare un’unità di arrotondamento.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 42
Funzioni: MEAN()
 Restituisce la media aritmetica dei valori indicati.
 Ignora i valori missing.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 43
Funzioni: SUM()
 Restituisce la somma dei valori indicati.
 Ignora i valori missing.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 44
Funzioni data
Funzione Risultato
Today() Restituisce la data di sistema.
MDY(mese,giorno,anno) Restituisce il corrispondente valore di data SAS.
YEAR(variabile data) Restituisce l’anno da una data SAS.
MONTH(variabile data) Restituisce il mese da una data SAS.
QTR(variabile data) Restituisce il trimestre da una data SAS(da 1 a 4).
WEEKDAY(variabile data) Restituisce il giorno da una data SAS(Domenica 1,
Lunedì 2… Sabato 7).
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 45
Concatenazione dataset
 Per concatenare in maniera verticale dei dataset, basta specificare due o più
dataset nell’istruzione SET.
 I record compariranno nell’ordine in cui dataset vengono specificati.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 46
Concatenazione ordinata dataset
 Per concatenare in maniera verticale e ordinata dei dataset, basta indicare
dei campi nell’istruzione BY.
 I dataset di input devono essere ordinati.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 47
Opzione IN=
 Si utilizza l’opzione IN= per verificare da quale dataset proviene
l’osservazione.
 Se è 0---->il record non proviene da quel dataset
 Se è 1---->il record proviene da quel dataset
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 48
Istruzione RENAME
 Permette di rinominare le variabili.
 Si può fare in punti diversi del data step.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 49
Unione di dataset: MERGE
 Serve per unire le osservazioni di due dataset.
 Di seguito la sintassi della MERGE.
 I dataset di input devono essere sortati per le variabili specificate in BY.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 50
Unione di dataset: MERGE
 Utilizzando le seguenti istruzioni nello step della merge si può:
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 51
Istruzione Descrizione
If a & b; Prende i record presenti in entrambe i dataset.
If a; Prende i record del primo dataset.
If b; Prende i record del secondo dataset.
……
Opzioni istruzione SET
 Oltre alle opzioni drop, keep e rename, ci sono altre opzioni.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 52
Opzione Descrizione
FIRSTOBS Indica il numero della prima osservazione da processare.
OBS Indica il numero dell’ultima osservazione da processare.
NOBS Crea una variabile temporanea contenente il numero di
osservazione del dataset.
END Crea una variabile temporanea che vale 1 quando viene letta
l’ultima osservazione.
PROC FREQ
 Serve per visualizzare la frequenza
dei valori delle variabili di un
dataset SAS.
 Di default, la proc freq analizza
ogni variabile presente nel
dataset.
 Visualizza ogni valore dei dati.
 Indica, per ogni variabile, il
numero di record con valore
missing.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 53
PROC FREQ: doppia entrata
 Serve per analizzare le possibili
combinazioni di due o più variabili.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 54
PROC FREQ: creazione tabella
 È possibile reindirizzare l’output
utilizzando l’opzione OUT=.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 55
PROC MEANS
 Visualizza statistiche descrittive per le variabili di un dataset.
 Di default, analizza ogni variabili numerica, ed esclude i valori mancanit
prima di calcolare le statistiche.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 56
PROC MEANS: VAR
 L’istruzione VAR limita le variabili di analisi.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 57
PROC MEANS: CLASS
 L’istruzione CLASS raggruppa i record in base alle variabili indicate.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 58
PROC MEANS: NWAY
 L’opzione NWAY calcola le statistiche per tutte le possibili combinazioni delle
variabili specificate nella CLASS.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 59
Istruzione OUTPUT
 Di default, SAS fa un output implicito alla fine di ogni iterazione.
 Utilizzando l’istruzione OUTPUT, SAS scrive un record solo quando esegue
l’istruzione di OUTPUT.
 Si può scrivere in una tabella anziché in un’altra, a seconda che una
condizione sia vera o meno.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 60
Variabili di accumulo: RETAIN
 L’istruzione RETAIN impedisce a SAS di reinizializzare il valore di una variabile
ad ogni iterazione.
 Inizializza la variabile specificata a missing o con il valore specificato.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 61
Variabili di accumulo: RETAIN e BY e
first e last
 Per accumulare i valori in maniera raggruppata, basta indicare nell’istruzione
BY le variabili desiderate.
 I dataset devono essere ordinati per le variabili specificate in BY.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 62
Funzione INPUT()
 SAS converte automaticamente un valore alfanumerico in un numerico quando
questo viene usato come un numero(es. nella SUM()).
 Per convertire da stringa a numerico si può usare la funzione input().
 Di seguito la sintassi:
 Non è possibile cambiare il tipo di una variabile, per farlo bisogna crearne una
di appoggio e successivamente rinominarla.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 63
Funzione PUT()
 SAS converte automaticamente un numero in stringa quando questo viene
usato come tale, ad esempio in una concatenazione.
 Per forzare la conversione, si può usare la funzione PUT(), specificando un
certo formato.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 64
DO/END
 Il ciclo comincia se e solo se il valore della variabili di inizio è minore o
uguale alla variabile fine.
 Il ciclo termina quando il valore della variabile supera il valore della variabile
fine.
 L’incremento e verifica è fatto a fine ciclo.
 Di seguito la sintassi.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 65
DO WHILE
 Esegue le istruzioni specificate, finché la condizione specificata è vera.
 La condizione viene verificata all’inizio del ciclo, per cui se la condizione è
falsa già alla partenza, il ciclo non viene mai eseguito.
 Di seguito la sintassi.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 66
DO UNTIL
 Esegue le istruzioni specificate, finché la condizione specificata è falsa.
 La condizione viene verificata alla fine del ciclo per cui, in ogni caso, almeno
una volta viene eseguito.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 67
Lettura dati da file esterni
 Per creare un dataset SAS partendo da una fonte esterna quale un file csv,
txt, ecc… si deve:
 Iniziare un passo di data, stabilendo il nome del dataset
 Utilizzare l’istruzione INFILE, con cui si specifica il path del file esterno
 Utilizzare l’istruzione INPUT, con cui si specifica come leggere i campi.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 68
Input a colonne
 Per leggere a colonne, bisogna:
 Specificare la colonna iniziale,
trattino, e la colonna finale del
campo.
 Usare il $ se il campo è
alfanumerico.
 Specificare un nome per la
variabile da leggere.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 69
PROC IMPORT
 Un altro modo per importare file
esterni, è utilizzare la PROC
IMPORT.
 Questa la sintassi generale:
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 70
Lettura file .csv
 Per leggere file con separatore è possibile usare la proc import o fare l’infile.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 71
Assegnazione Label
 E’ possibile applicare delle label ai nomi dei campi, per renderli più parlanti.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 72
Applicazione formati
 In SAS è possibile applicare dei formati alle variabili.
 I formati applicati nel passo di DATA sono permanenti.
 I formati applicati nelle procedure sono validi solo all’interno della
procedura.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 73
Input a formati
 È possibile leggere anche specificando i formati.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 74
PROC SORT
 Per ordinare un dataset si può utilizzare la PROC SORT.
 Può anche essere utilizzata per escludere duplicati.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 75
PROC SQL
 Permette di creare tabelle SAS, utilizzando codice SQL.
 Permette di leggere da altri db, con il modulo SAS/ACCESS.
 La query viene eseguita quando incontra il ‘;’. Si chiude con QUIT.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 76
Macro
 Le macro variabili vengono salvate in una tabella chiamata Symbol Table, e
restano disponibili per tutta la durata della sessione.
 Una macro è una parte di codice parametrizzata, che sia può richiamare
tante volte ed elimina la scrittura di codice ripetitivo.
 Quando si apre una sessione SAS, vengono create alcune macro variabili di
default. Si possono visualizzare con il comando %put _automatic_;
 Tutte le macro istruzioni sono precedute da %.
 Alcune possono essere usate in codice aperto(es. %let), altre devono per forza
stare all’interno di una macro(es. %do).
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 77
Referenziare Macro Variabili
 Le macro variabili si richiamano mettendo un ‘&’ prima del nome.
 Es.
 Le macro variabili non vengono risolte se racchiuse fra singoli apici. Bisogna
utilizzare i doppi apici.
 Le macro variabili contengono sempre del testo, non c’è bisogno di
differenziare fra numeriche o alfanumeriche.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 78
%PUT
 Serve per stampare dei valori o delle variabili nella finestra di log.
 %put _USER_; visualizza a log tutte le macro variabili utente;
 %put _AUTOMATIC_; visualizza a log tutte le macro variabili automatiche;
 %put _ALL_; visualizza a log tutte le macro variabili.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 79
Definizione di Macro Variabili
 Ci sono 3 modi per definire delle macro variabili:
 %LET
 CALL SYMPUT(in un passo di data)
 PROC SQL INTO:
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 80
%LET
 La %LET viene utilizzata per definire una macro variabile ed assegnarle un
valore.
 Se già esiste, viene sovrascritta, altrimenti viene creata.
 Se contiene % o &, questi puntamenti vengono prima risolti.
 Eventuali apici o doppi apici fanno parte del valore della variabile.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 81
Opzione Symbolgen
 L’opzione SYMBOLGEN scrive nel log SAS il valore assunto dalla macro
variabile ogni volta che questa viene utilizzata.
 L’opzione di default è NOSYMBOLGEN, quindi se si vuole visualizzare i valori
bisogna specificare l’opzione.
 Di seguito la sintassi:
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 82
Cancellazione di Macro Variabili
 E’ possibile cancellare la macro variabili in due modi:
 %SYMDEL
 CALL SYMDEL
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 83
Symbol Table
 Le macro variabili vengono salvate in:
 Global Symbol Table: vengono salvate quelle automatiche, disponibili per tutta la
sessione.
 Local Symbol Table: vengono salvate le macro variabili create all’interno di una
macro. Sono richiamabili solo all’interno della macro in cui vengono create.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 84
Definizione di una macro
 Per definire una macro, basta usare la seguente sintassi:
 Il nome della macro segue le regole dei nomi SAS e non può essere uguale ad
altre parole chiavi.
 Per richiamare una macro basta fare: %nomeMacro;
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 85
Macro Funzioni
 Le macro funzioni sono simili alle funzioni SAS.
 Sono eseguite dal macro processore prima della compilazione.
 Hanno argomenti che possono essere:
 Macro variabili
 Macro funzioni
 Invocazioni di macro
 Testo
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 86
Esempi di macro funzioni
Funzioni
%BQUOTE %QSCAN
%NRBQUOTE %QSUBSTR
%EVAL %QSYSFUNC
%INDEX %QUOTE
%LENGTH %STR
%NRBQUOTE %SUBSTR
%NRQUOTE %SYSGET
%NRSTR %UPCASE
%SYSFUNC ….
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 87
CALL SYMPUT()
 Permette di creare macro variabili in un data step.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 88
PROC SQL INTO:
 Applicando l’opzione INTO: alla PROC SQL, è possibile salvare il risultato della
query in una macro variabile.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 89
Macro con Parametri
 È possibile specificare dei parametri da passare in input ad una macro.
 Di seguito un esempio.
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 90
%IF %THEN %ELSE
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 91
%DO %END
Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 92

More Related Content

Recently uploaded

Recently uploaded (12)

Ticonzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentTiconzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, content
 
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCOa scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
 
Stati Uniti PPT geografia power point..
Stati Uniti  PPT geografia power point..Stati Uniti  PPT geografia power point..
Stati Uniti PPT geografia power point..
 
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
Accessibilità, tra miti e realtà: gli errori da non compiere e le azioni da i...
 
AccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniAccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domani
 
Nuovo Progetto Italiano - 1. Livello elementare. Libro dello studente (A1-A2)...
Nuovo Progetto Italiano - 1. Livello elementare. Libro dello studente (A1-A2)...Nuovo Progetto Italiano - 1. Livello elementare. Libro dello studente (A1-A2)...
Nuovo Progetto Italiano - 1. Livello elementare. Libro dello studente (A1-A2)...
 
Ostia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaOstia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'Europa
 
Asou.Mbaye_La relazione sulle macchine termiche.pptx
Asou.Mbaye_La relazione sulle macchine termiche.pptxAsou.Mbaye_La relazione sulle macchine termiche.pptx
Asou.Mbaye_La relazione sulle macchine termiche.pptx
 
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
 
Powerpoint tesi di laurea
Powerpoint tesi di laurea Powerpoint tesi di laurea
Powerpoint tesi di laurea
 
Transizione Energetica e Cooperazione: non solo CER
Transizione Energetica e Cooperazione: non solo CERTransizione Energetica e Cooperazione: non solo CER
Transizione Energetica e Cooperazione: non solo CER
 
Lo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressLo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice Impress
 

Featured

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

Corso sas

  • 1. Corso SAS SAS Base & Macro Arun Kumar Ram 05 Agosto 2019 © Copyright. Tutti i diritti sono riservati.
  • 2. Interfaccia SAS Finestra Editor Finestra Explorer Finestra Log Esegui codiceSalva Finestra Risultati Task Manager Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 2
  • 3. Programmi SAS  E’ una sequenza di passi finalizzata generalmente a creare un dataset. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 3
  • 4. Programmi SAS  I passi SAS sono:  DATA  PROC  I passi SAS terminano con:  run;  quit;  I programmi SAS possono essere eseguiti in modalità:  Interattiva  Batch Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 4
  • 5. Log programmi SAS  LOG-->contiene informazioni sui step eseguiti, errori e warning inclusi.  Posizionandosi sulla pagina del log, cliccando il ‘foglio bianco’(1) è possibile ripulire il log e partire da una situazione pulita. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 5 1
  • 6. Visualizzare informazione dataset  Facendo tasto destro-->Properties su una tabella, è possibile visualizzare dettagli come il numero di righe, colonne, indici, data modifica e creazione, ecc… Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 6
  • 7. Regole di sintassi  Le istruzioni SAS iniziano con una parola chiave(es. DATA o PROC)  Terminano con un punto e virgola  L’indentazione del codice non è obbligatoria, ma di aiuto per la lettura del codice  Una stessa riga può contenere più istruzioni  Un’istruzione può estendersi su più righe  I commenti su più righe si racchiudono tra /* e */  I commenti su una riga si possono fare con * e ; Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 7
  • 8. Tipi di variabili Vi sono 2 tipi di variabili:  Alfanumeriche: possono contenere caratteri, numeri, caratteri speciali e hanno una lunghezza massima di 32,767 bytes  Numeriche: hanno una lunghezza predefinita in 8 bytes anche se non si è limitati a 8 cifre. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 8
  • 9. Variabili di tipo Date  In SAS non esistono campi di tipo Date. I campi che appaiono come date in realtà sono numeri a cui è stato applicato un formato di tipo data.  Inoltre, in SAS "l’anno" 0 è il 1 gennaio 1960. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 9
  • 10. Valori mancanti Campo carattere non valorizzato(vuoto) Campo numerico non valorizzato(.) Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 10
  • 11. Nomi variabili e dataset  Gli standard per i nomi delle variabili e dei dataset sono uguali.  Lunghezza massima di 32 caratteri  Deve iniziare con un carattere(a-z) o un underscore(_)  Può continuare con caratteri, numeri o underscore  Nel caso il nome non sia valido, un errore verrà stampato nel log. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 11
  • 12. Librerie SAS  È una collezione di file SAS, che vengono referenziati con un nome logico(libref). ES. sashelp.class  Una libreria può essere temporanea(work) o permanente. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 12
  • 13. LIBNAME  Per allocare una libreria si usa la libname.  La libref seguo lo stesso standard di nomenclatura delle variabili dei dataset, unica differenze è che il nome non può superare i 8 caratteri.  Nel log si può verificare se la libreria è stata correttamente allocata o meno. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 13
  • 14. Istruzione DATA  Per creare un dataset basta scrivere:  Casi particolari:  Se non si specifica il nome del ds, la prima volta verrà creato il ds DATA1, poi DATA2 e cos’ via…  Se non si vuole creare alcun dataset, basta scrivere _NULL_ al posto del nome del dataset. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 14
  • 15. Istruzione SET  Per creare un dataset utilizzando un dataset SAS come input bisogna utilizzare  Di base, con l’istruzione SET si leggono tutti i record e tutte le variabili. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 15
  • 16. Creazione di nuove variabili  Per creare una nuova variabile devo usare l’istruzione di assegnazione. Es. creo la variabili newvar e la valorizzo con un numero fisso. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 16
  • 17. Operatori SAS Simbolo Definizione ** Elevamento a potenza * Moltiplicazione / Divisione + Addizione - Sottrazione Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 17
  • 18. Costanti SAS  In SAS si possono definire delle costanti, e si possono anche usare per creare nuove variabili.  Stringa  ’Ciao’  "CASA"  Numeriche  10  3.14  Data  ’30Aug1997’d  ’30Aug1997:13:15:00.00’DT N.B. E’ importante specificare la d o dt in caso di costanti di tipo data o datetime. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 18
  • 19. Operatori di confronto  Vengono usati per l’esecuzione condizionale. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 19 Simbolo Significato = Uguale a ^= Diverso da > Maggiore di < Minore di >= Maggiore o uguale di <= Minore o uguale di
  • 20. Operatori logici  Vengono usati nelle espressioni, per concatenare delle condizioni. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 20 Simbolo Significato & AND | OR ! OR ¬ NOT ˆ NOT ~ NOT
  • 21. Esecuzione condizionale  Per l’esecuzione condizionale, bisogna specificare una condizione. Se questa condizione è vera si esegue una certa istruzione. In caso contrario, si può eseguire una istruzione diversa o non eseguirne alcuna.  La sintassi generale è: Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 21
  • 22. Istruzione LENGTH  Serve per definire la lunghezza di una variabile.  Se la lunghezza definita è troppo corta, i dati verranno troncati(vedi es. sotto)  La posizione in cui si utilizza l’istruzione è importante. Dato che il campo name è già presente nel ds sashelp.class, la length specificata prima dell’istruzione vince su quella ereditata dal dataset. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 22
  • 23. Istruzione DO/END  DO/END vengono utilizzati per eseguire un gruppo di istruzioni in maniera condizionale.  Di seguito la sintassi. Il ramo ELSE non è obbligatorio. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 23
  • 24. Esecuzione Condizionale con SELECT  Un altro modo per eseguire istruzioni in maniera condizionale è utilizzare SELECT.  L’istruzione OTHERWISE è facoltativa, si può specificare vuota. Nel caso in cui venga omessa e tutte le condizioni precedenti risultino false, verrà generato un errore. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 24
  • 25. KEEP  Serve per selezionare le variabili da mantenere. Si può utilizzare in diversi punti.  A seconda di dove viene utilizzata, cambia il numero di variabili lette, e di conseguenza le performance. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 25
  • 26. DROP  Serve per selezionare le variabili da cancellare. Si può utilizzare in diversi punti.  A seconda di dove viene utilizzata, cambia il numero di variabili lette, e di conseguenza le performance. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 26
  • 27. Selezione di osservazioni: IF  Per selezionare i record da scrivere in un dataset SAS, si può utilizzare l’istruzione IF.  Se la condizione specificata sarà vera, il record verrà scritto nel dataset. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 27
  • 28. Selezione di osservazioni: DELETE  Per selezionare i record da NON scrivere in un dataset SAS, si può utilizzare l’istruzione DELETE.  Se la condizione specificata sarà vera, il record NON verrà scritto nel dataset. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 28
  • 29. Selezione di osservazioni: WHERE  Per selezionare i record da leggere, si può utilizzare l’istruzione WHERE.  Se la condizione specificata sarà vera, il record verrà letto.  Nella espressione da verificare, si possono specificare solo variabili presenti nel dataset di input, non variabili calcolate nel step corrente.  È molto più performante di una IF. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 29
  • 30. Istruzione PUT  Scrive informazioni nel log ed è utile in fase di test/debug. put ‘testo’; put nome-variabile=; put _all_; Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 30
  • 31. Funzioni: SUBSTR()  Estrae da una stringa, n caratteri(specificati nel 3° argomento) a partire dalla posizione indicata(2° argomento). Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 31
  • 32. Funzioni: SCAN()  Estrae da una stringa, la parola in posizione n, in base ai delimitatori specificati. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 32
  • 33. Funzioni: LENGTH()  Ritorna il numero di caratteri di una stringa, escludendo gli spazi in coda. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 33
  • 34. Funzioni: TRIM()  Elimina gli spazi in coda da una stringa. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 34
  • 35. Funzioni: CATX()  Concatena stringhe, rimuovendo spazi in testa e in coda. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 35
  • 36. Funzioni: STRIP()  Rimuove tutti gli spazi in testa e in coda. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 36
  • 37. Funzioni: COMPRESS()  Rimuove tutti gli spazi. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 37
  • 38. Funzioni: LEFT() e RIGHT()  Allineano a sinistra o a destra una stringa. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 38
  • 39. Funzioni: UPCASE() e LOWCASE() Upcase() Lowcase() Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 39
  • 40. Funzioni: INDEX()  Ritorna la posizione di una stringa all’interno di un’altra stringa.  Se la stringa ricercata non esiste, ritorna 0. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 40
  • 41. Funzioni: INT()  Restituisce la parte intera di un valore numerico. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 41
  • 42. Funzioni: ROUND()  Restituisce un numero arrotondato.  È anche possibile specificare un’unità di arrotondamento. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 42
  • 43. Funzioni: MEAN()  Restituisce la media aritmetica dei valori indicati.  Ignora i valori missing. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 43
  • 44. Funzioni: SUM()  Restituisce la somma dei valori indicati.  Ignora i valori missing. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 44
  • 45. Funzioni data Funzione Risultato Today() Restituisce la data di sistema. MDY(mese,giorno,anno) Restituisce il corrispondente valore di data SAS. YEAR(variabile data) Restituisce l’anno da una data SAS. MONTH(variabile data) Restituisce il mese da una data SAS. QTR(variabile data) Restituisce il trimestre da una data SAS(da 1 a 4). WEEKDAY(variabile data) Restituisce il giorno da una data SAS(Domenica 1, Lunedì 2… Sabato 7). Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 45
  • 46. Concatenazione dataset  Per concatenare in maniera verticale dei dataset, basta specificare due o più dataset nell’istruzione SET.  I record compariranno nell’ordine in cui dataset vengono specificati. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 46
  • 47. Concatenazione ordinata dataset  Per concatenare in maniera verticale e ordinata dei dataset, basta indicare dei campi nell’istruzione BY.  I dataset di input devono essere ordinati. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 47
  • 48. Opzione IN=  Si utilizza l’opzione IN= per verificare da quale dataset proviene l’osservazione.  Se è 0---->il record non proviene da quel dataset  Se è 1---->il record proviene da quel dataset Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 48
  • 49. Istruzione RENAME  Permette di rinominare le variabili.  Si può fare in punti diversi del data step. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 49
  • 50. Unione di dataset: MERGE  Serve per unire le osservazioni di due dataset.  Di seguito la sintassi della MERGE.  I dataset di input devono essere sortati per le variabili specificate in BY. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 50
  • 51. Unione di dataset: MERGE  Utilizzando le seguenti istruzioni nello step della merge si può: Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 51 Istruzione Descrizione If a & b; Prende i record presenti in entrambe i dataset. If a; Prende i record del primo dataset. If b; Prende i record del secondo dataset. ……
  • 52. Opzioni istruzione SET  Oltre alle opzioni drop, keep e rename, ci sono altre opzioni. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 52 Opzione Descrizione FIRSTOBS Indica il numero della prima osservazione da processare. OBS Indica il numero dell’ultima osservazione da processare. NOBS Crea una variabile temporanea contenente il numero di osservazione del dataset. END Crea una variabile temporanea che vale 1 quando viene letta l’ultima osservazione.
  • 53. PROC FREQ  Serve per visualizzare la frequenza dei valori delle variabili di un dataset SAS.  Di default, la proc freq analizza ogni variabile presente nel dataset.  Visualizza ogni valore dei dati.  Indica, per ogni variabile, il numero di record con valore missing. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 53
  • 54. PROC FREQ: doppia entrata  Serve per analizzare le possibili combinazioni di due o più variabili. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 54
  • 55. PROC FREQ: creazione tabella  È possibile reindirizzare l’output utilizzando l’opzione OUT=. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 55
  • 56. PROC MEANS  Visualizza statistiche descrittive per le variabili di un dataset.  Di default, analizza ogni variabili numerica, ed esclude i valori mancanit prima di calcolare le statistiche. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 56
  • 57. PROC MEANS: VAR  L’istruzione VAR limita le variabili di analisi. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 57
  • 58. PROC MEANS: CLASS  L’istruzione CLASS raggruppa i record in base alle variabili indicate. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 58
  • 59. PROC MEANS: NWAY  L’opzione NWAY calcola le statistiche per tutte le possibili combinazioni delle variabili specificate nella CLASS. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 59
  • 60. Istruzione OUTPUT  Di default, SAS fa un output implicito alla fine di ogni iterazione.  Utilizzando l’istruzione OUTPUT, SAS scrive un record solo quando esegue l’istruzione di OUTPUT.  Si può scrivere in una tabella anziché in un’altra, a seconda che una condizione sia vera o meno. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 60
  • 61. Variabili di accumulo: RETAIN  L’istruzione RETAIN impedisce a SAS di reinizializzare il valore di una variabile ad ogni iterazione.  Inizializza la variabile specificata a missing o con il valore specificato. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 61
  • 62. Variabili di accumulo: RETAIN e BY e first e last  Per accumulare i valori in maniera raggruppata, basta indicare nell’istruzione BY le variabili desiderate.  I dataset devono essere ordinati per le variabili specificate in BY. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 62
  • 63. Funzione INPUT()  SAS converte automaticamente un valore alfanumerico in un numerico quando questo viene usato come un numero(es. nella SUM()).  Per convertire da stringa a numerico si può usare la funzione input().  Di seguito la sintassi:  Non è possibile cambiare il tipo di una variabile, per farlo bisogna crearne una di appoggio e successivamente rinominarla. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 63
  • 64. Funzione PUT()  SAS converte automaticamente un numero in stringa quando questo viene usato come tale, ad esempio in una concatenazione.  Per forzare la conversione, si può usare la funzione PUT(), specificando un certo formato. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 64
  • 65. DO/END  Il ciclo comincia se e solo se il valore della variabili di inizio è minore o uguale alla variabile fine.  Il ciclo termina quando il valore della variabile supera il valore della variabile fine.  L’incremento e verifica è fatto a fine ciclo.  Di seguito la sintassi. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 65
  • 66. DO WHILE  Esegue le istruzioni specificate, finché la condizione specificata è vera.  La condizione viene verificata all’inizio del ciclo, per cui se la condizione è falsa già alla partenza, il ciclo non viene mai eseguito.  Di seguito la sintassi. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 66
  • 67. DO UNTIL  Esegue le istruzioni specificate, finché la condizione specificata è falsa.  La condizione viene verificata alla fine del ciclo per cui, in ogni caso, almeno una volta viene eseguito. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 67
  • 68. Lettura dati da file esterni  Per creare un dataset SAS partendo da una fonte esterna quale un file csv, txt, ecc… si deve:  Iniziare un passo di data, stabilendo il nome del dataset  Utilizzare l’istruzione INFILE, con cui si specifica il path del file esterno  Utilizzare l’istruzione INPUT, con cui si specifica come leggere i campi. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 68
  • 69. Input a colonne  Per leggere a colonne, bisogna:  Specificare la colonna iniziale, trattino, e la colonna finale del campo.  Usare il $ se il campo è alfanumerico.  Specificare un nome per la variabile da leggere. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 69
  • 70. PROC IMPORT  Un altro modo per importare file esterni, è utilizzare la PROC IMPORT.  Questa la sintassi generale: Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 70
  • 71. Lettura file .csv  Per leggere file con separatore è possibile usare la proc import o fare l’infile. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 71
  • 72. Assegnazione Label  E’ possibile applicare delle label ai nomi dei campi, per renderli più parlanti. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 72
  • 73. Applicazione formati  In SAS è possibile applicare dei formati alle variabili.  I formati applicati nel passo di DATA sono permanenti.  I formati applicati nelle procedure sono validi solo all’interno della procedura. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 73
  • 74. Input a formati  È possibile leggere anche specificando i formati. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 74
  • 75. PROC SORT  Per ordinare un dataset si può utilizzare la PROC SORT.  Può anche essere utilizzata per escludere duplicati. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 75
  • 76. PROC SQL  Permette di creare tabelle SAS, utilizzando codice SQL.  Permette di leggere da altri db, con il modulo SAS/ACCESS.  La query viene eseguita quando incontra il ‘;’. Si chiude con QUIT. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 76
  • 77. Macro  Le macro variabili vengono salvate in una tabella chiamata Symbol Table, e restano disponibili per tutta la durata della sessione.  Una macro è una parte di codice parametrizzata, che sia può richiamare tante volte ed elimina la scrittura di codice ripetitivo.  Quando si apre una sessione SAS, vengono create alcune macro variabili di default. Si possono visualizzare con il comando %put _automatic_;  Tutte le macro istruzioni sono precedute da %.  Alcune possono essere usate in codice aperto(es. %let), altre devono per forza stare all’interno di una macro(es. %do). Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 77
  • 78. Referenziare Macro Variabili  Le macro variabili si richiamano mettendo un ‘&’ prima del nome.  Es.  Le macro variabili non vengono risolte se racchiuse fra singoli apici. Bisogna utilizzare i doppi apici.  Le macro variabili contengono sempre del testo, non c’è bisogno di differenziare fra numeriche o alfanumeriche. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 78
  • 79. %PUT  Serve per stampare dei valori o delle variabili nella finestra di log.  %put _USER_; visualizza a log tutte le macro variabili utente;  %put _AUTOMATIC_; visualizza a log tutte le macro variabili automatiche;  %put _ALL_; visualizza a log tutte le macro variabili. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 79
  • 80. Definizione di Macro Variabili  Ci sono 3 modi per definire delle macro variabili:  %LET  CALL SYMPUT(in un passo di data)  PROC SQL INTO: Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 80
  • 81. %LET  La %LET viene utilizzata per definire una macro variabile ed assegnarle un valore.  Se già esiste, viene sovrascritta, altrimenti viene creata.  Se contiene % o &, questi puntamenti vengono prima risolti.  Eventuali apici o doppi apici fanno parte del valore della variabile. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 81
  • 82. Opzione Symbolgen  L’opzione SYMBOLGEN scrive nel log SAS il valore assunto dalla macro variabile ogni volta che questa viene utilizzata.  L’opzione di default è NOSYMBOLGEN, quindi se si vuole visualizzare i valori bisogna specificare l’opzione.  Di seguito la sintassi: Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 82
  • 83. Cancellazione di Macro Variabili  E’ possibile cancellare la macro variabili in due modi:  %SYMDEL  CALL SYMDEL Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 83
  • 84. Symbol Table  Le macro variabili vengono salvate in:  Global Symbol Table: vengono salvate quelle automatiche, disponibili per tutta la sessione.  Local Symbol Table: vengono salvate le macro variabili create all’interno di una macro. Sono richiamabili solo all’interno della macro in cui vengono create. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 84
  • 85. Definizione di una macro  Per definire una macro, basta usare la seguente sintassi:  Il nome della macro segue le regole dei nomi SAS e non può essere uguale ad altre parole chiavi.  Per richiamare una macro basta fare: %nomeMacro; Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 85
  • 86. Macro Funzioni  Le macro funzioni sono simili alle funzioni SAS.  Sono eseguite dal macro processore prima della compilazione.  Hanno argomenti che possono essere:  Macro variabili  Macro funzioni  Invocazioni di macro  Testo Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 86
  • 87. Esempi di macro funzioni Funzioni %BQUOTE %QSCAN %NRBQUOTE %QSUBSTR %EVAL %QSYSFUNC %INDEX %QUOTE %LENGTH %STR %NRBQUOTE %SUBSTR %NRQUOTE %SYSGET %NRSTR %UPCASE %SYSFUNC …. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 87
  • 88. CALL SYMPUT()  Permette di creare macro variabili in un data step. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 88
  • 89. PROC SQL INTO:  Applicando l’opzione INTO: alla PROC SQL, è possibile salvare il risultato della query in una macro variabile. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 89
  • 90. Macro con Parametri  È possibile specificare dei parametri da passare in input ad una macro.  Di seguito un esempio. Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 90
  • 91. %IF %THEN %ELSE Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 91
  • 92. %DO %END Arun Kumar Ram /05 Agosto 2019 /Copyright. Tutti i diritti sono riservati. 92