Post on 12-Mar-2020
transcript
7
2. I DATASET SAS
2.1 Introduzione
Le più comuni fonti dei dati da analizzare con i metodi statistici sono
- questionari provenienti da rilevazioni dirette
- dati statistici raccolti da enti di varia natura
- risultati di osservazioni sperimentali
I dati da elaborare sono spesso di tipo eterogeneo, nel senso che possono coesistere variabili qualitative
(sia sconnesse, sia ordinabili) e variabili quantitative (sia discrete, sia continue), anche se in alcune
circostanze si può avere a che fare con variabili solo qualitative oppure solo quantitative.
I dati da elaborare possono essere organizzati in modi diversi, ma i dataset SAS sono generalmente
organizzati in una matrice di dimensioni n×h, dove le n righe rappresentano le unità statistiche
considerate mentre le h colonne rappresentano le variabili oggetto di rilevazione.
Un esempio di questo genere è contenuto nella tabella successiva, in cui i è l’etichetta che corrisponde
alla i-esima unità statistica (con i = 1, 2, …, n), Xj rappresenta la j-esima variabile (con j = 1, 2, …, h) e
xij è la determinazione assunta dalla j-esima variabile sull’i-esima unità statistica
Tabella 2.1.1
Struttura di una matrice di dati
Variabili
Unità statistiche
X1 X2 ... Xj ... Xh
1 x11 x12 ... x1j ... x1h
2 x21 x22 ... x2j ... x2h
. ... ... ... ... ... ...
i xi1 xi2 ... xij ... xih
. ... ... ... ... ... ...
n xn1 xn2 ... xnj ... xnh
8
Va notato che a ogni unità statistica sono associate le medesime variabili e che tali variabili devono
comparire sempre nello stesso ordine.
In alcuni casi la determinazione assunta da una o più variabili su una determinata unità statistica non è
nota ed in questi casi si è in presenza di un’osservazione mancante (missing value).
In altre situazioni i dati da elaborare sono rappresentati sotto forma di tabelle di contingenza oppure di
matrici di covarianza o di correlazione. Il SAS è in grado di leggere anche dati organizzati in questi
modi, purché si descriva correttamente il formato dei dati utilizzando opportune istruzioni che verranno
descritte più avanti.
9
2.2 la struttura dei dataset SAS
In ogni dataset SAS è necessario indicare:
1) il nome del dataset
2) il nome delle variabili
3) il formato delle variabili, distinguendo se “numerico” o “alfanumerico”
4) le determinazioni assunte dalle variabili su ciascuna unità statistica
I nomi assegnati ai dataset e alle variabili devono rispettare le seguenti regole:
- non possono superare i 32 caratteri
- non devono contenere caratteri speciali (come lettere accentate o simboli come &, %, £, $, …)
- il primo carattere deve essere sempre una lettera oppure la sottolineatura (underscore) “_”
- i caratteri successivi possono essere lettere, numeri o underscore
- non sono ammessi spazi bianchi
- non si possono utilizzare nomi speciali che vengono utilizzati dal sistema, come per esempio
_N_, ERROR_ LIBRARY, SASHELP, WORK, USER, MAPS e molti altri.
Il sistema SAS riconosce la creazione (o la lettura) di un dataset quando si digita la parola chiave
“data” seguita dal nome che si desidera assegnare al dataset, come mostrato dall’esempio successivo
in cui il nome assegnato al dataset è “studenti”.
Esempio 2.2.1
/*ESEMPIO DI CREAZIONE DI UN DATASET*/
data studenti;
/*”studenti” è il nome assegnato al dataset*/
Le variabili contenute in un dataset vengono elencate una dopo l’altra dopo la parola chiave “input” e
devono essere separate fra loro da almeno uno spazio bianco.
Ciascuna variabile è caratterizzata da una serie di attributi, di cui soltanto il nome è obbligatorio,
mentre gli altri sono opzionali:
- il nome (NAME, obbligatorio)
10
- il tipo: numerico o alfanumerico (TYPE, opzionale, ma per default numerico)
- la lunghezza (LENGTH, opzionale)
- il formato di ingresso (INFORMAT, opzionale)
- il formato di uscita (FORMAT, opzionale)
- l’etichetta (LABEL, di lunghezza massima pari a 256 caratteri, opzionale)
Tutti questi attributi possono essere specificati mediante opportune istruzioni.
Per quanto riguarda il nome (NAME) da assegnare alle variabili, si seguono le stesse regole elencate a
proposito del nome da assegnare ai dataset.
Per quanto riguarda il tipo (TYPE) va notato che le determinazioni assunte da una variabile numerica
possono essere solo numeri, mentre quelle di una variabile alfanumerica possono essere numeri, lettere
e caratteri speciali. È importante tenere presente che il SAS utilizza il punto (e non la virgola) come
simbolo di separazione dei decimali.
Per default il SAS considera ogni variabile come numerica per cui, se si ha a che fare con variabili
alfanumeriche, occorre indicarlo in modo esplicito, aggiungendo il simbolo dollaro ($) dopo lo spazio
che segue il nome della variabile.
Se, per esempio, il dataset “studenti” contiene le informazioni relative al nome e cognome delle unità
statistiche, al loro numero di matricola e ai risultati ottenuti in due prove intermedie di un corso, le
istruzioni potrebbero essere quelle indicate nell’esempio seguente
Esempio 2.2.2
data studenti;
input cognome $ nome $ matricola prova1 prova2;
/*la keyword “input” è seguita dal nome e dal tipo delle variabili. Dato che “nome”
e “cognome” sono alfabetiche, il loro nome va seguito dal simbolo $. Le variabili
“matricola”, “prova1” e “prova2” sono invece numeriche*/
I restanti attributi delle variabili (tutti opzionali) verranno analizzati nei paragrafi seguenti, dopo aver
descritto le istruzioni necessarie per creare un dataset all’interno di un programma SAS.
11
2.3 La creazione di un dataset SAS all’interno del programma
Si è detto nel paragrafo precedente che per dichiarare al SAS l’intenzione di creare un dataset si digita
nella finestra del PROGRAM EDITOR la parola chiave “data”, seguita dal nome che si desidera
assegnare al dataset che si sta creando e dal punto e virgola finale. Nella riga successiva va poi digitata
la parola chiave “input” che descrive la struttura del dataset, elencando ordinatamente le variabili ed
eventualmente fissando la loro posizione.
Questa istruzione assume forme diverse a seconda del tipo di formato del dataset che può essere:
1) in formato libero
2) in formato fisso (o formato colonna)
Nel primo caso le h variabili rilevate su ogni unità statistica vengono elencate ordinatamente una dopo
l’altra dopo la parola chiave “input”, senza che sia necessario indicare la loro posizione specifica, ma
è necessario ci sia almeno uno spazio bianco di separazione fa i diversi nomi.
Nei file a formato fisso, invece, le variabili hanno una posizione fissa, nel senso che devono essere
dichiarate le colonne che contengono le determinazioni di ciascuna variabile. Per ottenere questo
risultato occorre aggiungere, dopo il nome di ciascuna variabile, l’indicazione delle colonne che
contengono le determinazioni corrispondenti.
Una volta terminata l’elencazione delle variabili si utilizza il punto e virgola e l’imputazione delle
diverse determinazioni delle h variabili considerate va fatta in una nuova riga utilizzando la parola
chiave parola chiave “cards” oppure la parola chiave equivalente “datalines”, entrambe seguite dal
solito punto e virgola.
Queste due parole chiave indicano al SAS che nelle righe successive saranno inserite le determinazioni
assunte dalle h variabili elencate dopo la parola chiave “input” sulle n unità statistiche considerate:
ogni riga corrisponde a una singola unità statistica, per cui saranno presenti in tutto n righe.
Il SAS segnala di aver riconosciuto le determinazioni inserite da programma evidenziando
automaticamente in giallo tutto il testo posizionato sotto “cards” o sotto “datalines”.
In questo caso non va inserito il punto e virgola finale in nessuna delle n righe evidenziate in giallo. Un
punto e virgola isolato va invece inserito nella riga successiva all’ultima osservazione (che riporta
l’elenco delle determinazioni delle h variabili rilevate sulla n-esima unità statistica considerata).
12
Per esempio, si consideri la tabella successiva che riporta i risultati ottenuti da un gruppo di 8 studenti
in due prove intermedie di un corso universitario.
Tabella 2.3.1
Esempio di matrice dei dati
Cognome Nome Matricola 1° prova 2° prova
Giovine Marta 101199 25 21
Rossi Fabio 112233 24 22
Conte Alessio 132378 26 26
Bianchi Rosa 123324 18 30
Valente Gianni 130001 21 24
Gallo Roberta 108875 18 23
Fiano Federico 122387 28 22
Germano Claudio 130024 26 23
Ciascuna colonna della tabella riporta una variabile: le prime due sono di tipo qualitativo (e quindi
alfanumeriche), mentre le tre successive sono invece quantitative (e quindi numeriche). Ogni riga della
tabella riporta le determinazioni delle singole variabili osservate sugli 8 studenti considerati.
Questa organizzazione dei dati è, a tutti gli effetti, un dataset SAS, in quanto è un insieme di dati
omogenei organizzati in forma rettangolare in cui le colonne indicano le variabili e le righe sono le
determinazioni assunte dalle variabili sulle unità statistiche considerate.
Un programma SAS che crea un dataset contenente i dati precedenti in un formato libero è riportato nel
riquadro seguente.
Esempio2.3.1
/*ESEMPIO DI CREAZIONE DI UN DATASET*/
data studenti; /*nome del dataset*/
input cognome $ nome $ matricola prova1 prova2; /*nome e tipo delle variabili*/
cards; /*”cards” o “datalines” sono le parole chiave che indicano l’inizio
dell’inserimento delle osservazioni*/
Giovine Marta 101199 25 21
Rossi Fabio 112233 24 22
Conte Alessio 132378 26 26
Bianchi Rosa 123324 18 30
Valente Gianni 130001 21 24
Gallo Roberta 108875 18 23
Fiano Federico 122387 28 22
Germano Claudio 130024 26 23
; /*il simbolo “;” indica il termine dell’inserimento delle osservazioni*/
proc print; /*procedura utilizzata per la visualizzazione del dataset*/
run;
13
Il dataset è stato chiamato “studenti”, mentre le 5 variabili (di cui le prime due alfanumeriche e le
restanti numeriche) sono state chiamate: cognome, nome, matricola, prova1 e prova2.
Per una maggiore chiarezza, nel programma sono stati inseriti anche dei commenti, che il SAS ha
evidenziato automaticamente in colore verde, mentre ha colorato in blu tutte le parole chiave.
Nella prima riga la stringa “studenti” che segue la parola chiave “data” viene riconosciuta dal SAS
come il nome assegnato al dataset che si sta creando.
Nella riga successiva la parola chiave “input” indica al SAS l’elenco delle variabili ed è quindi seguita
dalla lista dei nomi delle variabili. Le due variabili “cognome” e “nome” sono seguite dal simbolo “$”
per indicare che si tratta di variabili alfanumeriche.
La parola chiave “cards”, seguita dal punto e virgola, indica al SAS che si stanno inserendo le
determinazioni assunte dalle variabili elencate sugli 8 studenti considerati.
In questo caso il dataset è in formato libero, per cui le determinazioni possono essere scritte una di
seguito all’altra, separandole con uno spazio bianco, e possono avere lunghezza diversa. Ciascuna riga
si riferisce a un singolo studente e manca il punto e virgola finale.
L’indicazione del termine di inserimento delle osservazioni è stata effettuata utilizzando una riga con il
solo punto e virgola.
Nella penultima riga del programma è stata utilizzata una procedura SAS, la “proc print”, per
controllare che non siano stati commessi errori nell’imputazione dei dati. Questa procedura si limita
infatti a visualizzare il contenuto del dataset creato nella finestra denominata “Visualizzatore dei
risultati”.
L’ultima riga del programma contiene la sola istruzione “run”, seguita dal solito punto e virgola.
Questa è la parola chiave che indica il termine delle istruzioni e deve essere sempre presente alla fine di
un qualsiasi programma SAS.
L’istruzione “run” conclude un qualsiasi programma SAS.
Il programma SAS appena esaminato consiste di due soli STEP: un DATA STEP che consente di
creare il dataset degli studenti e un PROC STEP (formato dalla sola proc print) che ne mostra il
contenuto nella finestra “Visualizzatore dei risultati”. Si ottiene così l’output mostrato nel riquadro
seguente
14
Oss cognome nome matricola prova1 prova2
1 Giovine Marta 101199 25 21
2 Rossi Fabio 112233 24 22
3 Conte Alessio 132378 26 26
4 Bianchi Rosa 123324 18 30
5 Valente Gianni 130001 21 24
6 Gallo Roberta 108875 18 23
7 Fiano Federico 122387 28 22
8 Germano Claudio 130024 26 23
Va notato che durante la creazione (o anche durante la lettura) di un dataset, il SAS genera
automaticamente una variabile “_N_”, che contiene il numero di osservazioni create (o lette). Questa
variabile risulta particolarmente importante quando, per un qualche motivo, si desidera interrompere la
lettura di un file prima del suo termine reale.
Nell’esempio successivo si considera il caso in cui si crea lo stesso dataset dell’esempio 2.3.1, ma
questa volta utilizzando il formato fisso. In questo caso è necessario indicare al software la posizione
occupata dalle determinazioni di ciascuna variabile, esplicitando il numero delle colonne corrispondenti
dopo il simbolo “$” successivo al nome di ciascuna variabile alfanumerica e dopo il nome di ciascuna
variabile numerica. Il SAS evidenzia automaticamente in colore verde acqua il numero delle colonne.
Esempio 2.3.2 /*ESEMPIO DI CREAZIONE DI UN DATASET IN FORMATO FISSO*/
data studenti;
input cognome $ 1-7 nome $ 8-16 matricola 17-22 prova1 23-24 prova2 25-26;
cards;
GiovineMarta 1011992521
Rossi Fabio 1122332422
Conte Alessio 1323782626
BianchiRosa 1233241830
ValenteGianni 1300012124
Gallo Roberta 1088751823
Fiano Federico 1223872822
GermanoClaudio 1300242623
;
proc print;
run;
15
Come si può notare, le istruzioni contenute nel programma dichiarano che le determinazioni assunte dal
cognome occupano i posti compresi da colonna 1 a colonna 7, quelle relative al nome vanno da colonna
8 a colonna 16, mentre la matricola occupa i posti da colonna 17 a 22 e così via.
Le determinazioni assunte dalle variabili in un dataset a formato fisso possono quindi essere separate
da uno o più spazi bianchi o possono essere scritte una di seguito all’altra, senza che il SAS abbia
problemi nel leggere il dataset, dato tali determinazioni occupano dei posti prefissati.
Il dataset che si ottiene è identico a quello creato in precedenza, come si vede dai risultati che
compaiono nella finestra “Visualizzatore dei risultati”, una volta che il programma sia stato lanciato.
Il SAS è in grado di riconoscere anche dataset in formato misto, ossia in formato in parte fisso e in
parte variabile, come risulta dall’esempio successivo, in cui si è mantenuto il formato fisso per il nome
e il cognome, mentre le variabili numeriche sono in formato variabile.
Esempio 2.3.3 /*ESEMPIO DI CREAZIONE DI UN DATASET IN FORMATO MISTO*/
data studenti;
input cognome $ 1-7 nome $ 8-16 matricola prova1 prova2;
label cognome = 'cognome dello studente'
nome = 'nome dello studente'
matricola = 'matricola dello studente'
prova1 = 'punteggio ottenuto nella prima prova'
prova2 = 'punteggio ottenuto nella seconda prova'; /*etichette delle
variabili, opzionali*/
cards;
GiovineMarta 101199 25 21
Rossi Fabio 112233 24 22
Conte Alessio 132378 26 26
BianchiRosa 123324 18 30
ValenteGianni 130001 21 24
Gallo Roberta 108875 18 23
Fiano Federico 122387 28 22
GermanoClaudio 130024 26 23
;
proc print;
run;
In questo programma si è inserita anche la parola chiave “label” che assegna un’etichetta a ciascuna
delle variabili considerate. Questa etichetta apparirà nelle diverse elaborazioni che compariranno nella
finestra “visualizzatore dei risultati” accanto al nome originale. Questa istruzione (opzionale) può
essere utilizzata sia all’interno di un DATA STEP sia all’interno di un PROC STEP.
16
Se si utilizza un’etichetta contenente un apostrofo al suo interno è necessario usare due apostrofi
consecutivi. Il SAS segnala di aver riconosciuto le etichette evidenziandole automaticamente in viola,
come visualizzato nel riquadro precedente.
Un modo alternativo per indicare la posizione occupata dalle determinazioni assunte dalle diverse
variabili all’interno di un dataset consiste nell’incrementare numericamente il valore del puntatore. In
questo caso occorre indicare al SAS la lunghezza di ciascuna variabile e il numero degli eventuali spazi
bianchi presenti fra le diverse determinazioni.
Il numero di spazi bianchi va indicato digitando il simbolo “+” seguito dal numero in questione.
La lunghezza della variabile viene invece indicata in modo diverso a seconda della natura della
variabile stessa:
- se la variabile è alfanumerica, la lunghezza va indicata subito dopo il simbolo “$”, senza
lasciare alcuno spazio bianco, e va seguita dal punto
- se la variabile è numerica, la lunghezza va indicata dopo il nome della variabile, lasciando
almeno uno spazio bianco, e va seguita dal punto
Il SAS evidenzierà la lunghezza della variabile e l’eventuale numero di spazi bianchi in colore verde
acqua.
Per esempio, nell’esempio 2.3.3, la riga di istruzioni
input cognome $ 1-7 nome $ 8-16 matricola prova1 prova2;
può essere sostituita da
input cognome $7. nome $8. +1 matricola 6. +1 prova1 2. +1 prova2 2.;
in cui si indica al SAS che
- la prima variabile, cognome, è alfanumerica e lunga 7 caratteri,
- la seconda variabile, nome, è alfanumerica e lunga 8 caratteri,
- segue uno spazio bianco (+1),
- la variabile matricola è numerica e lunga 6 caratteri
- segue uno spazio bianco (+1),
- la variabile risultato della prima prova è numerica e lunga 2 caratteri,
17
- segue uno spazio bianco (+1),
- la variabile risultato della seconda prova è numerica e lunga 2 caratteri.
Alternativamente, il simbolo @i indica al puntatore di spostarsi alla colonna i, per cui la riga
input cognome $7. nome $8. +1 matricola 6. +1 prova1 2. +1 prova2 2.;
può essere sostituita dalle istruzioni equivalenti
input cognome $7. nome $8. @17 matricola 6. @24 prova1 2. @27 prova2 2.;
in cui, prima del nome della variabile, invece di inserire il numero di spazi bianchi, si indica la colonna
in cui va spostato il puntatore.
Quale che sia il formato scelto, va notato che tutte le osservazioni (ossia tutte le righe evidenziate in
giallo) devono presentare le stesse variabili. Le determinazioni delle variabili non osservate sono
registrate come dato mancante (missing value).
Quando nel dataset è presente un numero elevato di variabili numeriche è possibile elencarle in modo
abbreviato scrivendole sotto forma vettoriale. In questo caso, affinché il SAS possa riconoscere che si
tratta di un vettore di variabili, è necessario che:
- tutte le variabili abbiano lo stesso nome,
- l’ultimo carattere dell’identificativo della prima variabile sia il numero 1
- l’ultimo carattere dell’identificativo dell’ultima variabile corrisponda al numero di variabili
considerate.
Se, per esempio, si considerano 5 variabili numeriche, le stesse possono essere identificate con una
qualsiasi delle seguenti istruzioni
input var1 var2 var3 var4 var5;
input var1-var5;
input X1-X5;
18
Pur non essendo una regola, il consiglio generale per assegnare un nome alle variabili è quello di farlo
in modo tale che dal nome si possa facilmente risalire al contenuto della variabile (nome mnemonico).
Per quanto riguarda gli ultimi due attributi delle variabili, ossia il formato di ingresso (INFORMAT) e
quello di uscita (FORMAT), le istruzioni variano a seconda della natura della variabile.
Nel caso di variabili numeriche queste due istruzioni consentono di specificare il numero complessivo
di cifre (in cui viene conteggiato l’eventuale punto decimale e gli eventuali decimali) sia in ingresso
(mediante la parola chiave “informat”) sia in uscita (mediante la parola chiave “format”). La stringa
di istruzioni assume la forma seguente
format nome_variabile commax.y
informat nome_variabile commax.y
dove l’istruzione “comma” (evidenziata automaticamente in colore verde acqua dal SAS) è seguita dal
numero complessivo delle cifre “x” che comprende l’eventuale punto decimale “.” e il numero “y” di
cifre decimali, dove il numero di decimali sarà esattamente pari a y se il numero x è sufficientemente
grande, mentre sarà inferiore a y in caso contrario.
Nell’esempio successivo alle 3 variabili X1, X2 e X3 viene associato sempre lo stesso valore (posto
pari a 1234.5678), ma la variabile X1 verrà stampata a terminale con 9 cifre complessive (di cui 4
interi, il punto decimale e 4 decimali), la variabile X2 con 7 cifre (4 intere, il punto decimale, 2
decimali) e X3 con 4 cifre intere.
data variabili_numeriche;
input X1 X2 X3;
cards;
1234.5678 1234.5678 1234.5678
;
proc print;
format X1 comma9.4 X2 comma7.2 X3 comma5. ;
run;
Con questi formati, infatti, si otterranno i seguenti valori di output
19
Oss X1 X2 X3
1 1234.5678 1234.57 1235
Va notato che, quando si usa un formato di lunghezza inferiore al formato di partenza, il SAS arrotonda
automaticamente il valore (come accade, in questo esempio, per la seconda e la terza variabile).
Nel caso di variabili alfanumeriche il SAS, per default, le considera lunghe al massimo 8 caratteri, ma
si può indicare una lunghezza inferiore facendo seguire il simbolo $ dal numero di cifre e dal punto,
come nell’esempio seguente
data variabili_alfanum;
input var1 $ var2 $;
cards;
ABC abc
DEFG defg
HIJKLMN hijklmn
OP op
;
proc print;
format var1 $2. var2 $6.;
run;
In questo caso la stampa del dataset fornisce l’output riportato nel riquadro successivo, in cui la
variabile “var1” è lunga solo due caratteri, mentre “var2” arriva fino a 6 caratteri (se le determinazioni
originali sono lunghe a sufficienza).
Oss var1 var2
1 AB abc
2 DE defg
3 HI hijklm
4 OP op
Per indicare al SAS che una variabile alfanumerica è lunga più di 8 caratteri è necessario indicare
esplicitamente le colonne che contengono le sue determinazioni, così come descritto nelle pagine
precedenti.
20
2.4 La gestione delle date di calendario
Quando una variabile corrisponde a una data occorre indicarlo in modo esplicito al sistema utilizzando
uno dei possibili formati che il SAS identifica come data. Se si inserisce una data in un dataset creato
da programma, bisogna innanzitutto dichiarare il formato della variabile (in genere giorno-mese-anno)
e il numero di caratteri corrispondenti.
Il SAS trasforma automaticamente in numeri (sia positivi, sia negativi) qualsiasi data. Per convenzione
il valore zero corrisponde al 1° gennaio del 1960.
Per esempio, il programma riportato nel riquadro seguente
Esempio 2.4.1 data dataformat;
input data1 ddmmyy10. +1 data2 ddmmyy10. +1 data3 ddmmyy8.;
cards;
02-03-1899 02/03/1899 02031899
01-01-1960 01/01/1960 01011960
30-01-2017 30/01/2017 30012017
;
proc print;
run;
utilizza 3 diversi formati di data:
- la variabile “data1” è una data formata da 10 caratteri in cui i primi 2 identificano il giorno (dd),
poi c’è un carattere speciale (il trattino), i due caratteri successivi identificano il mese (mm) , poi
c’è ancora il trattino e gli ultimi 4 sono gli anni (yy) e quindi è nel formato gg-mm-aaaa;
- la variabile “data2” è analoga alla precedente, con l’unica differenza riguardante il carattere
speciale che separa giorno, mese e anno (e quindi è nel formato gg/mm/aaaa):
- la variabile “data3” è costituita da 8 valori numerici in cui i primi due indicano il giorno, il terzo
e il quarto il mese e gli ultimi 4 l’anno (e quindi è nel formato ggmmaaaa)
L’output del SAS assume la forma riportata nel riquadro seguente
Oss data1 data2 data3
1 -22219 -22219 -22219
2 0 0 0
3 20849 20849 20849
21
in cui, come si vede, le date sono state convertite in valori numerici dal SAS.
Se si desidera ottenere le date in un certo formato, anziché nel formato numerico utilizzato dal SAS,
occorre specificarlo utilizzando l’istruzione “format”, così come è stato fatto nella proc print del
programma riportato nel riquadro successivo in cui si stampano a terminale le date dell’esempio
precedente. In questo caso sono stati selezionati tre diversi formati di date, ma nei manuali SAS sono
riportati molti altri formati differenti da questi.
proc print;
format data1 date7. data2 monyy. data3 ddmmyy.;
Con queste istruzioni si ottiene il seguente output
Oss data1 data2 data3
1 02MAR99 MAR99 02/03/99
2 01JAN60 JAN60 01/01/60
3 30JAN17 JAN17 30/01/17
in cui:
- la prima variabile (data1) è costituita da due cifre (che indicano il giorno), da 3 lettere (che
indicano le inziali del mese in inglese) e infine le ultime due cifre (che indicano l’anno);
- la seconda data (data2) è costituita da 3 lettere (che corrispondono alle iniziali del mese) e da
due cifre (che indicano le ultime due cifre dell’anno)
- la terza data (data3) è costituita da tre blocchi di due cifre, separati fra loro dal simbolo “/”, che
indicano rispettivamente il giorno, il mese e l’anno, tutti espressi mediante numeri.
In tutti gli esempi precedenti i dati da elaborare sono stati inseriti da programma ma, come vedremo nei
paragrafi seguenti, possono essere anche letti da archivi esterni (il cui formato può essere di vario tipo:
SAS, Excel, Access, SPSS, …). Se il file è in formato ASCII o SAS la lettura avviene molto
semplicemente, attraverso un’opportuna istruzione inserita in un DATA STEP, mentre nei restanti casi
è necessario un PROC STEP, ossia l’utilizzo di un’apposita procedura.
22
2.5 Le librerie
Per libreria di dati si intende una raccolta di uno o più dataset. I dataset creati da un programma SAS
sono di due tipi: temporanei e permanenti.
- I dataset temporanei, cancellati al termine della sessione di lavoro, si trovano per default in una
libreria denominata “WORK” che viene creata automaticamente dal SAS. Tale libreria viene
svuotata a ogni chiusura della sessione di lavoro.
- I dataset permanenti vengono invece archiviati in una libreria creata dall’utente e sono
disponibili fino a quando non siano cancellati manualmente. Per poter archiviare in modo
permanente un dataset occorre innanzitutto creare la libreria di riferimento (per esempio può
trattarsi di una cartella creata sul desktop, su una partizione del disco fisso o su un supporto
esterno). Va notato che anche per i nomi delle librerie valgono le medesime regole che sono
state ricordate in precedenza. a proposito dei nomi delle variabili e dei dataset.
Si è detto che l’ambiente di lavoro predefinito dal SAS è una libreria temporanea di default la cui
denominazione è “WORK”. Tutto quello che viene memorizzato in questa libreria viene cancellato al
termine di ogni sessione di lavoro.
Se si desidera che i dataset creati nel corso del lavoro non vengano cancellati è necessario utilizzare
una libreria diversa da quella di default.
Il nome di un dataset SAS è sempre costituito da due stringhe di caratteri, separate da un punto, in cui
la prima stringa indica la libreria e la seconda il nome del dataset. Se la prima stringa viene omessa, il
SAS le attribuisce per default il nome “work” e il dataset risulterà temporaneo.
Negli esempi 2.3.1, 2.3.2 e 2.3.3 il dataset studenti è quindi in realtà identificato da “work.studenti”,
dove la stringa “work” viene attribuita automaticamente dal SAS.
Se, invece, si è creato un dataset denominato “risultati_test” mediante la riga di istruzioni
data risultati_test;
il nome effettivo completo del dataset sarà “work.risultati_test”.
23
Si è detto che la libreria WORK, usata per registrarvi dataset temporanei, viene eliminata al termine
della sessione insieme con tutti i suoi archivi e a questa eliminazione pensa automaticamente il sistema.
Questa convenzione risulta comoda almeno per due motivi:
a) il disco su cui si registrano gli archivi non verrà ingombrato inutilmente da dati che non si
desidera registrare in modo permanente (perché magari frutto di risultati intermedi o di prove);
b) non si rischia di lasciare registrazioni su disco, se queste non sono state volutamente rese
permanenti (ad esempio perché riservate).
In definitiva, la scelta circa la cancellazione o meno del dataset viene effettuata determinando la libreria
associata al dataset stesso.
Per utilizzare una libreria diversa da “WORK” esistono due possibilità:
- si può scrivere un’istruzione all’interno del programma SAS utilizzando la parola chiave
libname seguita dal nome della libreria e dalla localizzazione completa del dataset, ossia del
percorso necessario per trovarlo (tale percorso va inserito fra apici).
- si può selezionare l’icona Nuova Libreria dalla barra degli strumenti e completare la finestra
con il nome logico della libreria e la localizzazione completa del dataset.
Nelle pagine successive si farà esplicito riferimento solo al primo metodo.
Si osservi che il comando libname può essere usato in qualsiasi punto di un programma SAS e che
rimane in esecuzione fino alla fine della sessione di lavoro.
È possibile utilizzare librerie diverse in un’unica sessione di lavoro, in modo da salvare i dataset in
cartelle differenti.
Per memorizzare un dataset SAS, ossia per inserire il file in una libreria prescelta, è necessario digitare
due stringhe di caratteri separate da un punto: la prima stringa corrisponde al nome associato alla
libreria e la seconda stringa è il nome del dataset. In tutti gli altri casi il file verrà memorizzato
automaticamente nella libreria “WORK” e sarà quindi eliminato alla chiusura della sessione.
Per esempio, se alla libreria si volesse attribuire il nome “libr1” e si volessero salvare i dati all’interno
della directory “c:\dataset”, ossia all’interno della cartella “dataset” presente sul dico C, le istruzioni
assumerebbero la forma
24
libname libr1 'c:\dataset';
Come si vede, il percorso della libreria deve essere scritto fra apici e viene evidenziato
automaticamente in colore viola dal SAS.
Un qualsiasi dataset da memorizzare in tale libreria avrà la prima stringa del nome identificata da libr1
e sarà memorizzato in modo permanente nella libreria “c:\dataset”.
Nell’esempio successivo si crea lo stesso dataset utilizzato negli esempi 2.3.1, 2.3.2 e 2.3.3, ma questa
volta il dataset rimarrà sul computer anche al termine della sessione di lavoro SAS.
Esempio 2.5.1 libname libr1 'c:\dataset'; /*memorizzazione degli archivi nella libreria
c:\dataset - creazione di un dataset permanente*/
data libr1.studenti;
input cognome $ nome $ matricola prova1 prova2;
cards;
Giovine Marta 101199 25 21
Rossi Fabio 112233 24 22
Conte Alessio 132378 26 26
Bianchi Rosa 123324 18 30
Valente Gianni 130001 21 24
Gallo Roberta 108875 18 23
Fiano Federico 122387 28 22
Germano Claudio 130024 26 23
;
proc print;
run;
25
Esercizi riepilogativi
Esercizio 2.1
Costruire il dataset “libri” in formato libero contenente le variabili “anno”, “opere”, “libri_ab” sulla
base delle informazioni riportate nella tabella successiva.
Opere librarie pubblicate in Italia dall’anno 2000 al 2014 (fonte ISTAT)
Anno Opere librarie Opere per 10.000 abitanti
2000 55.546 9,8
2001 53.131 9,3
2002 54.624 9,6
2003 54.266 9,4
2004 52.760 9,1
2005 59.743 10,2
2006 61.440 10,4
2007 59.129 10,0
2008 58.829 9,8
2009 57.558 9,6
2010 63.800 10,5
2011 59.237 9,9
2012 59.230 9,9
2013 61.966 10,3
2014 57.820 9,5
Soluzione
data libri;
input anno opere libri_ab;
cards;
2000 55546 9.8
2001 53131 9.3
2002 54624 9.6
2003 54266 9.4
2004 52760 9.1
2005 59743 10.2
2006 61440 10.4
2007 59129 10.0
2008 58829 9.8
2009 57558 9.6
2010 63800 10.5
2011 59237 9.9
2012 59230 9.9
2013 61966 10.3
2014 57820 9.5
;
proc print;
run;
26
Esercizio 2.2
Costruire il dataset “Ist_arte” in formato fisso contenente le variabili “anno” (da colonna 1 a colonna
4), “visit_p” (da colonna 6 a colonna 11) e “visit_np” (da colonna 15 a colonna 20) sulla base delle
informazioni riportate nella tabella successiva.
Istituti di antichità e d'arte statali, visitatori paganti e non paganti
(dati in migliaia, fonte ISTAT)
Anno Visitatori paganti Visitatori non paganti
2000 15.488 14.688
2001 15.730 13.813
2002 15.046 15.223
2003 14.433 16.018
2004 15.161 17.066
2005 15.530 17.518
2006 16.465 18.110
2007 16.247 18.196
2008 15.603 17.504
2009 14.604 17.776
2010 15.516 21.821
2011 17.230 23.993
2012 16.801 20.398
2013 17.650 20.775
2014 19.070 21.675
Soluzione
data Ist_arte;
input anno 1-4 visit_p 6-11 visit_np 15-20;
cards;
2000 15488 14688
2001 15730 13813
2002 15046 15223
2003 14433 16018
2004 15161 17066
2005 15530 17518
2006 16465 18110
2007 16247 18196
2008 15603 17504
2009 14604 17776
2010 15516 21821
2011 17230 23993
2012 16801 20398
2013 17650 20775
2014 19070 21675
;
proc print;
run;
27
Esercizio 2.3
Creare l’archivio permanente “direct1.tasso_neet” in cui la libreria direct1 indica la directory
“c:\es_MRS” sulla base dei dati riportati nella tabella seguente che contiene le variabili “Regione” e
“NEET” (percentuale di giovani non occupati né inseriti in un percorso regolare di
istruzione/formazione)
Tasso NEET regionale (anno 2017, fonte ISTAT)
Regione NEET
Piemonte 20,0
Valle d'Aosta 15,7
Lombardia 15,9
Trentino Alto Adige 14,3
Veneto 15,2
Friuli Venezia Giulia 16,9
Liguria 20,9
Emilia Romagna 16,1
Toscana 16,7
Umbria 19,5
Marche 19,0
Lazio 21,7
Abruzzo 22,0
Molise 26,1
Campania 36,0
Puglia 33,3
Basilicata 29,2
Calabria 36,7
Sicilia 37,6
Sardegna 29,1
28
Soluzione
libname direct1 'c:\es_MRS';
data direct1.tasso_neet;
input regione $ 1-22 neet;
cards;
Piemonte 20.0
Valle d'Aosta 15.7
Lombardia 15.9
Trentino Alto Adige 14.3
Veneto 15.2
Friuli Venezia Giulia 16.9
Liguria 20.9
Emilia Romagna 16.1
Toscana 16.7
Umbria 19.5
Marche 19.0
Lazio 21.7
Abruzzo 22.0
Molise 26.1
Campania 36.0
Puglia 33.3
Basilicata 29.2
Calabria 36.7
Sicilia 37.6
Sardegna 29.1
;
proc print;
run;
29
Esercizio 2.4
Considerata la seguente tabella relativa a 5 unità statistiche su cui sono state rilevate 3 variabili
numeriche
identificativo var1 var2 var3
A 1 13 -4.2
B 6 25 -5.1
C 4 18 -2.7
D 2 27 0.5
E 2 17 -3.5
creare un dataset temporaneo (denominato archivio_1) contenente la variabile alfabetica “id” e le tre
variabili numeriche X1, X2 e X3, in cui le prime due sono costituite da due cifre intere, mentre la terza
è costituita da due cifre intere e due decimali.
data archivio_1;
input id $ X1 X2 X3;
format X1 comma2. X2 comma2. X3 comma6.2;
cards;
A 1 13 -4.2
B 6 25 -5,1
C 4 18 -2.7
D 2 27 0.5
E 2 17 -3.5
;
proc print;
run;