際際滷

際際滷Share a Scribd company logo
Universit`a degli Studi di Napoli Federico II
Facolt`a di Scienze Politiche
Corso di Laurea Magistrale in Scienze Statistiche per le Decisioni
Relazione di fine Seminario Elementi di SAS ed SQL
Analisi statistiche con SAS ed SQL
Nozioni base per lutilizzo di SAS e la costruzione di un database con SQL
Candidati:
Barbara Amendola
Erika Serotino
Ida Riccio
Marco DAlessandro
Professore:
Ragozini Giancarlo
Anno Accademico 20172018
Indice
1 Elementi di SAS 4
1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Struttura di un 束programma損 SAS . . . . . . . . . . . . . . . . . . 7
1.2.1 Cosa 竪 un SAS Data Set? . . . . . . . . . . . . . . . . . . . 8
1.2.2 SAS DATA STEP . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Esempio applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Un dataset di esempio: CARS . . . . . . . . . . . . . . . . . 14
1.3.2 Statistiche descrittive . . . . . . . . . . . . . . . . . . . . . . 15
1.3.3 Regressione lineare . . . . . . . . . . . . . . . . . . . . . . . 17
2 Elementi di SQL 20
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Creazione di un database . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1 Popolazione di un database . . . . . . . . . . . . . . . . . . 22
2.2.2 Interrogare il database . . . . . . . . . . . . . . . . . . . . . 22
2.3 Progettazione di un database Studenti . . . . . . . . . . . . . . . . 23
2.3.1 Il linguaggio SQL . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.3 Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1
Elenco delle 鍖gure
1.1 Funzionamento e componenti di SAS . . . . . . . . . . . . . . . . . 6
1.2 Struttura rettangolare di un archivio SAS . . . . . . . . . . . . . . 8
1.3 Flowchart dello schema operativo di un DATA STEP . . . . . . . . 11
1.4 Finestra principale di SAS Studio . . . . . . . . . . . . . . . . . . . 12
1.5 Tabella log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Risultati dellesecuzione di un codice . . . . . . . . . . . . . . . . . 13
1.7 CARS dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Caratteristiche delle variabili coinvolte nellanalisi . . . . . . . . . . 15
1.9 Statistiche descrittive di alcune variabili . . . . . . . . . . . . . . . 15
1.10 Gra鍖ci di sintesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.11 Output di un modello di regressione lineare semplice . . . . . . . . 18
1.12 Analisi dei residui come output gra鍖co di SAS . . . . . . . . . . . . 19
2.1 Schermata principale di PostgreSQL . . . . . . . . . . . . . . . . . 25
2.2 Creazione delle tabelle . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 Messaggio di corretta esecuzione del comando . . . . . . . . . . . . 26
2.4 Popolamento del database . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 Prima query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6 Seconda query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7 Terza query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.8 Quarta query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.9 Quinta query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2
Elenco delle tabelle
2.1 Studenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 Esami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3
Capitolo 1
Elementi di SAS
1.1 Introduzione
Il Statistical Analysis System (SAS)1
竪 un prodotto di base statistica ampia-
mente di鍖uso, in quanto luso di archivi di dati organizzati 竪 divenuto ad oggi
obbligatorio. Tale software 竪 molto simile allSPSS (acronimo di Statistical
Package for the Social Sciences), ovvero programma integrato che richiama,
di volta, in volta, speci鍖che applicazioni, de鍖nizione di un preciso linguaggio di
comando per tutte le procedure, nascita dei "system 鍖le" (archivi contenenti dati e
metadati: nome delle variabili, posizioni occupate nei record, nomi delle modalit,
ecc.) "autodescrittivi". Pertanto, non essendo tale software predisposto alla lettura
di archivi autodescrittivi quali 鍖le di tipo ASCII, EBCDIC, qualunque procedura
SAS pu嘆 essere applicata esclusivamente ai SAS data set (archivi costituiti da
dati pi湛) metadati organizzati che potranno poi essere sottoposti al trattamento di
una o pi湛 applicazioni gi realizzate ed incluse nel sistema SAS.2
SAS 竪 un complesso di prodotti software integrati (sviluppati dal SAS Institute)
che permettono ad un programmatore:
 linserimento, la ricerca e la gestione di dati (data entry);
 la generazione di report e gra鍖ci;
1
SAS 竪 un linguaggio di programmazione molto particolare, in quanto 竪 stato studiato per
lanalisi statistica di dati.
2
SAS 竪 completamente diverso da tutti gli altri linguaggi di programmazione.
4
 la computazione di analisi statistiche e matematiche;
 la piani鍖cazione, la previsione ed il supporto alle decisioni;
 di fare ricerca operativa e project management;
 di gestire la qualit;
 di sviluppare applicazioni.
Cos狸 come altri linguaggi di programmazione di quarta generazione orientati ai dati
quali SQL (si veda al Capitolo 2), SAS assume una struttura dei 鍖le prede鍖nita e
lascia al Sistema operativo lidenti鍖cazione dei 鍖le. Questo permette al program-
matore e allutente di concentrarsi sulla gestione del dato trovandosi allinterno di
una sorta di loop. Altre funzioni permettono la generazione di statistiche o report
con la semplice de鍖nizione del dataset corretto.
Al confronto di altri linguaggi di programmazione generici, poi, questo approccio
permette allutente di preoccuparsi meno della conservazione dei dati per con-
centrarsi maggiormente sulle informazioni immagazzinate. Questo permette di
sfumare il concetto di programmazione permettendo ad utenti, che non ricadono
nel concetto di programmatori, di sviluppare agilmente applicazioni.
Il nocciolo del sistema SAS 竪 basato su un pool di applicazioni:
 Base SAS Software, utilizzato per la gestione dei dati;
 SAS procedures software, utilizzato per lanalisi ed il reporting;
 Macro facility, ossia un tool per estendere e personalizzare le applicazioni;
 DATA step debugger, ossia un tool per individuare gli eventuali problemi
nelle applicazioni sviluppate;
 SAS windowing environment, ovvero un interfaccia gra鍖ca ed interattiva per
eseguire e testare le applicazioni sviluppate nellambiente SAS.
Osserviamo ora alcune caratteristiche degli elementi e funzionalit del software.
1. Struttura dei Dati: solitamente si utilizzano strutture rettangolari; tuttavia
nel software in oggetto vi sono anche dati relazionali, nonch辿 vettori e matrici
come oggetti;
5
2. Capacit gra鍖che: si pu嘆 trattare di gra鍖ca discreta e/o continua e ci嘆
risulta utile per analisi esplorative, presentazione analisi (report), veri鍖ca
delladattamento di un modello. Alcuni pacchetti consentono anche gra鍖ci
dinamici;
3. Flessibilit: 竪 infatti molto semplice eseguire calcoli o predisporre algoritmi
non previsti dal pacchetto per prodotti con linguaggio come con il software
in oggetto nonch辿 la disponibilit dello stesso di librerie di dominio pubblico
in Statlib;
4. Disponibilit su piattaforme: mentre molti prodotti sono disponibili
distintamente per alcuni sistemi operativi e non per altri, il software in oggetto
ha il vantaggio di essere disponibile su pi湛 piattaforme, come Windows e
Unix.
Una caratteristica importante e vantaggiosa del sistema SAS 竪 che esso 竪 anche
"interfacciato" con i principali data base esistenti su workstation ecc. (di cui un
importante esempio 竪 Oracle). La struttura operativa del software pu嘆 essere
rappresentata nella seguente immagine (Figura 1.1):
Figura 1.1: Funzionamento e componenti di SAS
6
1.2 Struttura di un 束programma損 SAS
SAS 竪 basato su di un linguaggio 束comando損 formato da 3 elementi fondamentali:
1. parole chiave SAS (es. PROC, PUT, DATA, FORMAT, etc);
2. nomi SAS (es. variabili, archivi, procedure, opzioni, etc);
3. caratteri speciali ed operatori.
Esso 竪 inoltre basato su criteri sintattici molto simili a quelli dei pi湛 avanzati
linguaggi di programmazione simbolici ad alto livello (ad esempio FORTRAN).
Un programma SAS (o per meglio dire un lavoro e鍖ettuato con il SAS) si articola
in uno o pi湛 passi, pi湛 propriamente detti STEP, che possono essere di due tipi:
 Il DATA STEP (letteralmente, passo di dati) serve, soprattutto, a creare
e gestire i SAS DATA SET, ossia gli archivi organizzati, che potranno poi
essere sottoposti al trattamento di una o pi湛 applicazioni gi realizzate ed
incluse nel sistema SAS. Osserviamo che 竪 inoltre possibile utilizzare questo
tipo di STEP anche per scrivere e far eseguire programmi del tutto simili a
quelli di tipo tradizionale. Nella speci鍖ca applicazione pratica, inizia sempre
con una particolare istruzione, ovvero la DATA;
 Il PROC STEP (letteralmente, passo di procedura), nello speci鍖co, serve
a richiamare una procedura SAS. Le procedure sono in pratica applicazioni gi
realizzate e rese disponibili agli utenti e organizzate in gruppi omogenei (che
possono essere acquisiti, in base alle necessit). Generalmente, le procedure
vengono applicate ai SAS DATA SET (non potendo trattare archivi non
autodescrittivi, ossia normali 鍖le di tipo ASCII, EBCDIC, etc., ovvero nel
linguaggio macchina) Il linguaggio di comando delle procedure 竪 ovviamente
coerente con quello previsto dal DATA STEP. Nella speci鍖ca applicazione
pratica, tutte le istruzioni SAS (anche quelle inserite nelle procedure) ter-
minano con un preciso carattere ";" che fa da delimitatore, permettendo un
tracciato libero nella scrittura dei programmi.
7
1.2.1 Cosa 竪 un SAS Data Set?
Vediamo ora cosa si intende e da cosa 竪 costituito un SAS DATA SET, anche detto
archivio SAS e rappresentato in seguito gra鍖camente nella Figura 2.
Figura 1.2: Struttura rettangolare di un archivio SAS
Come abbiamo gi accennato, un archivio SAS 竪 rettangolare e autodescrittivo,
ovvero contiene sia i dati sia i metadati, dove per metadati si intendono le informa-
zioni sul contenuto dei dati stessi (es. nomi, caratteristiche e posizioni occupate
dalle variabili, numero di osservazioni, ecc.).
Le variabili vengono identi鍖cate nei programmi SAS da nomi, che possono essere
costituiti da stringhe di caratteri (max. 32): iniziano con una lettera o con un
"underscore" (""), senza contenere alcun altro carattere speciale, ma solo lettere e
cifre; non c竪 distinzione fra maiuscolo e minuscolo. Questa sintassi 竪 valida per
tutti i nomi SAS (max. 8-32 byte), salvo limitate eccezioni; ad esempio, i nomi
8
dei formati de鍖niti dallutente non possono terminare per un carattere numerico.
Ogni variabile SAS ha inoltre vari attributi, quali ad esempio tipo, lunghezza,
formato interno ed esterno, label. Osserviamo, inoltre, che in un archivio SAS oltre
alle variabili de鍖nite dallutente esistono alcune variabili automatiche generate dal
sistema con le relative informazioni (i gi citati metadati). Esse possono contenere
informazioni di vario tipo (date, tempi, valori esadecimali, logiche, ecc.), ai 鍖ni
della loro registrazione nei SAS DATA SET, ed hanno soltanto due possibili nature:
 numeriche;
 carattere.
Tutti gli altri tipi di variabili sono ricondotti a queste due forme (ad esempio, per
le variabili logiche viene utilizzato il valore numerico 0 per "falso" ed un qualunque
altro valore, in genere 1, per "vero").
Le variabili numeriche possono contenere solo numeri, preceduti o meno da un
segno e contenenti anche un possibile punto decimale. Sono accettate per嘆 anche
particolari notazioni: un esempio notevole si ha quando si vuole indicare la mancanza
di informazione in relazione ad un particolare "data value", ossia la presenza di un
"missing value". La label (etichetta, ovvero un metadato) pu嘆 essere associata al
nome di una variabile per mezzo di una apposita istruzione. Essa 竪 costituita, in
particolare, da una stringa di caratteri (鍖no a 40 byte) e viene stampata da molte
procedure accanto, od in luogo, del nome della variabile, permettendo cos狸 una pi湛
facile lettura degli output.
1.2.2 SAS DATA STEP
Uno o pi湛 archivi SAS possono essere costruiti tramite un DATA STEP partendo
da uno o pi湛 archivi ASCII (creati tramite un editore, un programma di video-
scrittura o da un qualunque altro programma) e/o da uno o pi湛 archivi SAS gi
creati in precedenza, nonch辿 anche o alternativamente da dati inseriti, in modo
opportuno, al termine delle istruzioni che lo compongono.
Un ulteriore alternativa 竪 quella di creare un archivio SAS "importando" archivi
di diverso tipo (ad esempio di tipo Excel, dBase o Lotus, nel caso di personal
computer). Tuttavia, ci嘆 non avviene mediante un DATA STEP, bens狸 utilizzando
9
apposite procedure. Da un punto di vista pratico, un DATA STEP inizia con
listruzione:
DATA x;
dove x identi鍖ca il nome dellarchivio SAS che stiamo costruendo. Lespressione x
pu嘆, inoltre, essere costituita da:
 un nome SAS, ad esempio: DATA PROVA;
 un doppio nome, ad esempio: DATA LIB1.PROVA;
 da niente, ad esempio: DATA;
Nello speci鍖co: nei casi a) e c) verr creato un archivio SAS temporaneo,
mentre nel caso b), caratterizzato da due nomi separati da un punto, sar costruito
un SAS DATA SET permanente.
 importante sottolineare che un DATA STEP termina quando ha inizio o un altro
DATA STEP o un PROC STEP e lo stesso vale per i PROC STEP; nel caso di un
utilizzo di tipo interattivo, invece, 竪 necessario terminare lultimo DATA STEP o
PROC STEP con la seguente apposita istruzione:
RUN;
E inoltre una importante caratteristica generale, ossia valida per tutti i casi sopra
citati, di un DATA STEP segue un preciso schema operativo, ovvero le istruzioni
incluse nel DATA STEP vengono eseguite tante volte quante sono le osservazioni
da trattare (a meno che non vi sia alcuna istruzione di tipo INPUT, SET, MERGE,
o UPDATE, per le quali 竪 prevista una sola esecuzione dellistruzione stessa).
Nello speci鍖co, viene letta unosservazione, trattata eseguendo tutte le istruzioni
presenti nel DATA STEP ed in鍖ne viene scritta losservazione nellarchivio in
output, dopodich辿 il sistema SAS legge una nuova osservazione, la tratta, la scrive e
va avanti in questo modo 鍖no a quando terminano i record dellarchivio in ingresso.
A quel punto questo DATA STEP 竪 terminato ed il sistema si predispone per
eseguire lo STEP successivo. Tale processo viene rappresentato schematicamente
nella Figura 3, mediante il seguente 鍖owchart.
10
Figura 1.3: Flowchart dello schema operativo di un DATA STEP
Prima di passare alla classi鍖cazione delle istruzioni DATA STEP, categorizziamo,
pi湛 in generale, le istruzioni SAS. Queste ultime sono classi鍖cabili in base a vari
criteri. Una prima divisione pu嘆 essere e鍖ettuata in base alle seguenti categorie:
 istruzioni utilizzate nel DATA STEP;
 istruzioni usate da (una o pi湛) PROC STEP (ovvero procedura);
 istruzioni che possono essere incluse in un qualsiasi punto dei programmi.
Le istruzioni utilizzate nel DATA STEP sono poi classi鍖cabili in 4 gruppi:
11
1. gestione archivi (es. listruzione BY indica che larchivio va trattato per
gruppi, CARDS indica linserimento di dati nel programma, DATA indica
linizio del DATA STEP oppure il nome dellarchivio creato);
2. azione (es. listruzione ABORT cessa lesecuzione del DATA STEP, CALL
richiama un sottoprogramma, OUTPUT registra una osservazione);
3. controllo (es. listruzione DO de鍖nisce un gruppo di istruzioni, SELECT
de鍖nisce lesecuzione condizionata di gruppi di istruzioni, END termina una
DO oppure una SELECT);
4. informazione (es. listruzione ARRAY de鍖nisce vettori e matrici, FORMAT
stabilisce il formato di uscita, LABEL associa descrizioni alle variabili).
Analogamente, esistono rispettive istruzioni nel PROC STEP, infatti le suddette
istruzioni vengono utilizzate anche nelle procedure e, corrispondentemente alli-
struzione DATA che indica linizio del DATA STEP, vi 竪 listruzione PROC che
identi鍖ca una procedura da utilizzare.
1.3 Esempio applicativo
I programmi SAS sono creati usando una interfaccia utente nota come SAS Studio.
Questa 竪 la 鍖nestra di apertura dellambiente SAS (Figura 1.4). Sulla sinistra vi 竪
il men湛 a tendina utilizzato per navigare su varie speci鍖cit del programma. Sulla
destra, poi, vi 竪 larea di lavoro usata per scrivere le linee di codice ed eseguirle.
Figura 1.4: Finestra principale di SAS Studio
12
Il men湛 a tendina contiene funzionalit per creare e gestire programmi. Esso
consente anche lutilizzo delle funzionalit pre-installate con il programma.
Lesecuzione di un codice viene fatta utilizzando la prima icona in alto a sinistra
della relativa area di lavoro, o alternativamente utilizzando il tasto F3 di un qualsiasi
computer. Il log del codice eseguito 竪 disponibile nella tabella Log, che descrive
gli errori, gli avvisi o le note riguardanti lesecuzione del programma: questa 竪 la
鍖nestra dove si ottengono tutte le informazioni per risolvere il codice (Figura 1.5).
Figura 1.5: Tabella log
In鍖ne, il risultato dellesecuzione di un codice 竪 disponibile nella tabella dei risultati
(Figura 1.6). Di default, i risultati sono formattati come tabelle html.
Figura 1.6: Risultati dellesecuzione di un codice
13
1.3.1 Un dataset di esempio: CARS
SAS Studio dispone di una serie di built-in datasets che sono gi installati nel soft-
ware SAS. Essi possono essere esplorati ed usati per la formulazione di espressioni
campionarie per lanalisi dei dati. Per esplorare questi dataset basta andare in Li-
braries -> My Libraries -> SASHELP. Espandendo questa 鍖nestra, possiamo
vedere la lista dei nomi di tutti i dataset gi disponibili in SAS.
Poniamo la nostra attenzione, in particolare, su un dataset denominato CARS: esso
contiene 428 osservazioni di 15 variabili, relative ad alcuni modelli di automobili
del 2004. Visualizziamo le prime osservazioni del dataset nella Figura 1.7:
Figura 1.7: CARS dataset
Giusto per completezza, scriviamo le variabili coinvolte nellanalisi di questo da-
taset (parzialmente elencate nel men湛 a tendina): marca, modello, tipo, origine,
trasmissione, prezzo di listino, prezzo di fatturazione, grandezza del motore, cilindra-
ta, potenza del motore, peso, lunghezza, interasse, distanza in citt ed in autostrada.
Le variabili sono molto utili nellanalisi dei dati. Esse vengono usate in espressioni
nelle quali 竪 applicata lanalisi statistica. Per esempio, considerando il nostro
14
dataset, per esplorare le variabili e la loro tipologia basta fare doppio click su di
esse (si veda la Figura 1.8).
Figura 1.8: Caratteristiche delle variabili coinvolte nellanalisi
1.3.2 Statistiche descrittive
Come primo passo, utilizzando alcune delle variabili di cui sopra, 竪 possibile
produrre delle statistiche di sintesi utilizzando lopzione Tasks del men湛 a tendina.
Per esempio, si pu嘆 produrre una sintesi delle variabili distanza su strada, distanza
su autostrada e peso del veicolo, come illustrato sapientemente in Figura 1.9.
Figura 1.9: Statistiche descrittive di alcune variabili
15
Le statistiche descrittive mostrate riguardano la media, la deviazione standard, il
minimo ed il massimo della distribuzione delle variabili oggetto di analisi. Lultima
colonna della tabella, invece, indica il numero delle osservazioni usate nellanalisi.
 possibile, come anche per tutti i software di analisi statistica, creare dei gra鍖ci
che illustrano pi湛 dettagliatamente le caratteristiche delle variabili considerate. I
principali gra鍖ci che 竪 possibile creare con SAS sono: istogrammi (con annesse
curve di densit stimate), diagrammi a barre verticali (con annessa suddivisione in
gruppi), gra鍖ci a torta e box-plots. Questi sono sintetizzati in Figura 1.10:
Figura 1.10: Gra鍖ci di sintesi
16
Presentiamo brevemente le descrizioni dei gra鍖ci sopra inseriri:
 in alto a sinistra 竪 presente un istogramma (con funzione di densit stimata)
della variabile potenza del motore;
 in alto a destra 竪 presente un diagramma a barre verticali della variabile
lunghezza del veicolo raggruppata per il tipo di veicolo;
 in basso a sinistra 竪 presente, poi, un gra鍖co a torta della variabile tipo di
veicolo, dove ciascuna parte rappresenta la percentuale di veicoli di quel tipo;
 in basso a destra, in鍖ne, sono presenti i boxplots della variabile potenza del
motore, ciascuno dei quali ri鍖ette un determinato tipo di veicolo.
1.3.3 Regressione lineare
Il modello di regressione lineare 竪 usato per identi鍖care la relazione tra una
variabile dipendente ed una o pi湛 variabili indipendenti. Viene qui proposto un
modello della relazione, e le stime dei valori dei parametri sono usate per sviluppare
una equazione stimata di regressione. Vari test vengono poi usati per determinare
se il modello 竪 soddisfacente: se il modello 竪 tale allora, lequazione di regressione
stimata pu嘆 essere usata per prevedere i valori della variabile dipendente dati i
valori assunti dalle variabili indipendenti.
Lesempio proposto nelle seguenti righe riguarda la correlazione tra le variabili
potenza del motore e peso del veicolo, quindi una regressione lineare semplice.
In SAS la procedura PROC REG 竪 usata per trovare il modello di regressione
lineare tra 2 variabili. A titolo puramente illustrativo mostriamo la linea di codice
utilizzata per produrre i risultati, ma, si pu嘆 semplicemente sfruttare il solito men湛
a tendina per riportare direttamente i risultati del modello:
PROC SQL;
create table CARS1 as
SELECT invoice,horsepower,length,weight
FROM
SASHELP.CARS
WHERE make in (Audi,BMW);
17
RUN;
proc reg data=cars1;
model horsepower= weight ;
run;
Quando viene eseguito il codice sopra riportato, otteniamo il seguente risultato,
come esplicitato in Figura 1.11:
Figura 1.11: Output di un modello di regressione lineare semplice
dove la prima tabella riporta il numero di osservazioni usate per la regressione;
la seconda tabella riporta i risultati dellANOVA e鍖ettuata sui residui; la terza
tabella ha come indicatore principale lindice R2
della bont di adattamento del
nostro modello ai dati a disposizione (opportunamente corretto in un modello di
18
regressione lineare multiplo); lultima tabella riporta, in鍖ne, le stime dei parametri,
i loro errori standard e la statistica-test t (con relativo p-value).
Il codice riportato qualche riga fa, restituisce anche loutput gra鍖co delle varie
stime dei parametri e dellanalisi dei residui, come mostrato nella Figura 1.12.
Essendo questa una procedura avanzata di SAS, essa non si ferma esclusivamente
nel dare i valori dellintercetta come output.
Figura 1.12: Analisi dei residui come output gra鍖co di SAS
19
Capitolo 2
Elementi di SQL
2.1 Introduzione
SQL, acronimo di Structured Query Language, 竪 un linguaggio di riferimento
sviluppato alla 鍖ne degli anni 70 e nasce allinterno dei laboratori di ricerca del-
lIBM per lavorare con database che seguano il modello relazionale.
Inizialmente, questo linguaggio si chiamava SEQUEL e fu implementato in un
prototipo chiamato SEQUEL-XRM, e le sperimentazioni con tale prototipo porta-
rono ad una revisione del linguaggio (SEQUEL/2) che in seguito cambi嘆 nome per
motivi legali, diventando SQL.
Nel corso degli anni 80 numerose compagnie commercializzarono prodotti basati su
SQL, che divenne lo standard industriale per quanto riguarda i database relazionali.
SQL 竪 un linguaggio per database basati sul modello relazionale progettato per:
 creare e modi鍖care schemi di database (DDL: Data De鍖nition Language);
 inserire, modi鍖care e gestire dati memorizzati (DML: Data Manipulation
Language);
 interrogare i dati memorizzati (DQL: Data Query Language);
 creare e gestire strumenti di controllo ed accesso ai dati (DCL: Data Control
Language).
20
Nonostante il suo nome, non si tratta dunque solo di un semplice linguaggio
di interrogazione, ma alcuni suoi sottoinsiemi si occupano della creazione, della
gestione e dellamministrazione del database.
2.2 Creazione di un database
La creazione di un database consiste nella creazione delle tabelle che lo compongono.
In realt, prima di poter procedere alla creazione delle tabelle, normalmente occorre
creare il database, il che di solito signi鍖ca de鍖nire uno spazio dei nomi separato
per ogni insieme di tabelle. La sintassi SQL utilizzata per la creazione del database
竪 la seguente:
CREATE DATABASE nome_database
ed una volta creato il database 竪 possibile creare le tabelle che lo compongono
mediante listruzione CREATE TABLE, procedura che sar illustrata nella
sezione dedicata alla parte applicativa.
Durante la creazione delle tabelle possono poi essere speci鍖cate due chiavi.
Una chiave primaria 竪 un insieme di attributi che viene utilizzata per individuare
univocamente una t-upla o riga presente in una tabella; ad esempio, il codice 鍖scale
per la tabella contenente il personale di unazienda.
Una chiave esterna, invece, 竪 un vincolo di integrit referenziale tra due o pi湛
tabelle; essa identi鍖ca una o pi湛 colonne di una tabella (referenziante) che referenzia
una o pi湛 colonne di unaltra tabella (referenziata), dunque, rappresenta uno o pi湛
campi che fanno riferimento alla chiave primaria di unaltra tabella.
Ad esempio, si supponga di disporre di due tabelle: una tabella CUSTOMER, in
cui sono inclusi tutti i dati dei clienti e una tabella ORDERS, in cui sono contenuti
tutti gli ordini dei clienti. Il vincolo impostato stabilisce che tutti gli ordini devono
essere associati a un cliente presente nella tabella CUSTOMER. In questo caso,
verr posizionata una chiave esterna sulla tabella ORDERS che sia in relazione con
la chiave primaria della tabella CUSTOMER. In questo modo, 竪 possibile garantire
che tutti gli ordini della tabella ORDERS sono correlati a un cliente presente nella
tabella CUSTOMER. Cio竪, nella tabella ORDERS non possono essere contenute
informazioni relative a un cliente che non 竪 incluso nella tabella CUSTOMER.
21
2.2.1 Popolazione di un database
Col termine popolazione di un database si intende lattivit di inserimento dei
dati al suo interno. In un database relazionale ci嘆 corrisponde alla creazione delle
righe che compongono le tabelle che costituiscono il database.
Listruzione SQL che e鍖ettua linserimento di una riga in una tabella 竪 INSERT.
La sintassi con cui essa viene usata pi湛 comunemente 竪:
INSERT INTO nome tabella (elenco delle colonne)
VALUES (valori attribuiti)
Questo costrutto permette di inserire i dati in un dataset relazionale mentre nella
sezione successiva vedremo come 竪 possibile estrarre i dati.
2.2.2 Interrogare il database
DQL (Data Query Language  linguaggio di interrogazione dei dati) comprende i
comandi per leggere ed elaborare i dati presenti in un database.
Linterrogazione (o query) 竪 la funzionalit pi湛 usata di un database e le clausole
di cui dispone listruzione SELECT sono numerose ed a volte possono dar luogo
a combinazioni piuttosto complicate, ma interessanti. Col comando SELECT,
infatti, 竪 possibile estrarre i dati, in modo mirato, dal database mediante lutilizzo
di costrutti di programmazione denominati appunto query.
La sintassi completa 竪 la seguente:
select*from , di cui si vedr nel dettaglio nella parte applicativa, sono clausole
rispettivamente di proiezione, in quanto stabiliscono quali colonne devono essere
riportate nel risultato 鍖nale, e di selezione poich辿 stabiliscono da quale tabella
estrarre i dati; queste sono le uniche clausole obbligatorie ma 竪 possibile aggiungere
ulteriori clausole come where che permette di de鍖nire un 鍖ltro sulle righe che
saranno analizzate oppure join che combina solo le righe delle due tabelle che
soddisfano un certo predicato di confronto, come in unoperazione di intersezione.
Le nozioni basilari 鍖n qui esposte saranno illustrate in modo esempli鍖cativo
mediante il caso studio presente nella sezione successiva.
22
2.3 Progettazione di un database Studenti
In questa sede di lavoro, lobiettivo 竪 stato quello di progettare un database
riguardante lesito dellesame di Statistica di alcuni studenti universitari. Ciascuno
di essi 竪 identi鍖cato dal nome, cognome, matricola ed et. Per quanto concerne
lesame, esso 竪 identi鍖cato dal codice del corso di laurea, dallo studente, dal mese
in cui lesame 竪 stato sostenuto e dalla votazione.
Per poter progettare il data base in questione, proseguiamo per passi.
Innanzitutto focalizziamoci sulle informazioni relative agli studenti, che possono
essere sintetizzate nella tabella che segue:
Matricola Cognome Nome Et
Tabella 2.1: Studenti
Procediamo adesso con le ulteriori informazioni a nostra disposizione, riguardanti
questa volta lesame sostenuto dagli studenti coinvolti nellanalisi. In modo analogo:
CodiceCorso Studente Mese Voto
Tabella 2.2: Esami
2.3.1 Il linguaggio SQL
Il passo successivo consiste nel tradurre le due tabelle illustrate pocanzi, in
linguaggio SQL.
/*Table:STUDENTI */
create table STUDENTI(
MATRICOLA NUMERIC not null,
23
COGNOME CHAR(20) not null,
NOME CHAR(20) not null,
ETA NUMERIC not null,
constraint PK_STUDENTI primary key(MATRICOLA)
);
Si 竪 ipotizzato che:
 la matricola relativa a ciascuno studente sia di natura numerica;
 il cognome ed il nome siano rappresentati da una stringa di 20 caratteri di
lunghezza 鍖ssa;
 let sia di natura numerica.
/*Table:ESAMI */
create table ESAMI(
CODICECORSO NUMERIC not null,
STUDENTE NUMERIC not null references STUDENTI(MATRICOLA),
MESE CHAR(20) not null,
VOTO INTEGER not null,
constraint PK_ESAMI primary key(CODICECORSO, STUDENTE, MESE)
);
Per quanto concerne le variabili contenute nella tabella ESAMI abbiamo, in questo
caso, ipotizzato che:
 il codice del corso di laurea sia di tipo numerico;
 ogni studente sia univocamente identi鍖cato da un codice alfanumerico a 3
cifre (ciascuno studente, inoltre, 竪 identi鍖cato dagli elementi della matrice
STUDENTI, come da riferimento);
 il mese di conseguimento dellesame sia identi鍖cato da una stringa di 20
caratteri di lunghezza 鍖ssa;
 il voto dellesame sia un numero intero.
24
2.3.2 PostgreSQL
Il database progettato nella fase precedente in tramite lo schema relazionale verr,
nel seguito di questo paragrafo, tradotto in linguaggio SQL. Come software di
DataBase Management System (DBMS) 竪 stato scelto PostgreSQL.3
Quindi, come
primo passo lanciamo linterfaccia gra鍖ca pgadmin e creiamo un nuovo database,
denominato STUDENTI.
pgadmin, in particolare, 竪 unapplicazione C++ libera, una interfaccia gra鍖ca
che consente di amministrare in modo sempli鍖cato database di PostgreSQL: essa
permette di creare un database da zero, creare le tabelle ed eseguire operazioni
di ottimizzazione sulle stesse. Presenta, inoltre, un feedback sulla creazione delle
tabelle per evitare eventuali errori.
Figura 2.1: Schermata principale di PostgreSQL
Il passo successivo consiste nellaprire il pannello per il codice SQL e lanciare i vari
comandi per creare le tabelle. Nel nostro caso, le tabelle da creare sono 2.
3
 un completo DBMS ad oggetti rilasciato con licenza libera (stile Licenza BSD). Spesso
viene abbreviato come "Postgres", sebbene questo sia un nome vecchio dello stesso progetto. In
PostgreSQL, tutti gli oggetti (con leccezione di ruoli e tablespace) sono situati in uno schema.
Esso agisce e鍖ettivamente come un namespace, permettendo agli oggetti con lo stesso nome di
coesistere nella stessa base di dati.
25
Figura 2.2: Creazione delle tabelle
Questo 竪 il risultato della corretta esecuzione dei comandi:
Figura 2.3: Messaggio di corretta esecuzione del comando
Passiamo, adesso, alla fase successiva riguardante il popolamento del database.
Tale procedura 竪 eseguibile mediante i comandi di seguito riportati:
26
Figura 2.4: Popolamento del database
2.3.3 Query
La prima query che andremo ad e鍖ettuare estrae tutte le informazioni degli studenti:
/*Estrae tutte le informazioni degli studenti*/
select*from studenti
Di seguito 竪 riportato loutput della query:
Figura 2.5: Prima query
27
Il risultato della query produce, dunque, la tabella studenti, cos狸 come dichiarata
inizialmente: le sue colonne sono rappresentate dalle variabili matricola, cogno-
me, nome ed et, mentre le sue righe (osservazioni) sono rappresentate dai 7 studenti.
La seconda query che andremo ad e鍖ettuare estrae tutte le informazioni riguardanti
gli esami sostenuti dagli studenti coinvolti nellanalisi:
/*Estrae tutte le informazioni degli esami*/
select * from esami
Di seguito 竪 riportato loutput della query:
Figura 2.6: Seconda query
Il risultato della query, in questo caso, 竪 rappresentato dalla tabella esami, cos狸 come
anchessa dichiarata inizialmente: le sue colonne sono questa volta rappresentate
dalle variabili codice corso, studente, mese e voto.
La terza query che andremo ad e鍖ettuare estrae il numero di matricola degli
studenti ed il voto desame:
/*Estrarre voto desame e matricola dello studente */
select voto, studente from esami.
28
Di seguito 竪 riportato loutput della query:
Figura 2.7: Terza query
Il risultato della terza query 竪 rappresentato solamente da due colonne, ossia quella
della variabile voto e quella della variabile studente, entrambe contenute allinterno
della macrotabella esami in precedenza costruita.
La quarta query che andremo ad e鍖ettuare 竪 pi湛 articolata rispetto alle precedenti,
ed estrae le informazioni degli studenti il cui voto desame 竪 maggiore di quello
dello studente Costa Fausto (24).
select * from studenti join esami on matricola=studente
where voto > any (select voto from esami
join studenti on studente=matricola
where cognome=costa
and nome=fausto);
29
Di seguito 竪 riportato loutput della query:
Figura 2.8: Quarta query
Molto intuitivamente, si pu嘆 vedere come la query estrae dal database iniziale tutte
le informazioni relative agli studenti il cui voto allesame di Statistica 竪 superiore a
quello di un altro studente, dichiarato nella query stessa.
La quinta ed ultima query che andremo ad e鍖ettuare ricalca quella precedente, ed
in questo caso estrae le informazioni degli studenti il cui voto desame 竪 inferiore
rispetto alla votazione dello studente Costa Fausto:
select * from studenti join esami on matricola=studente
where voto < any (select voto from esami
join studenti on studente=matricola
where cognome=costa
and nome=fausto);
30
Di seguito 竪 riportato loutput dellultima query:
Figura 2.9: Quinta query
Di鍖erentemente dalla query precedente, questa volta il risultato 竪 rappresentato da
una sola osservazione poich竪 solamente uno studente presenta voto minore rispetto
a quanto dichiarato nella query stessa.
31
Bibliogra鍖a
[1] Ron Cody. Learning SAS by Example: a programmers guide. North Carolina
(USA), SAS Press, 2007
[2] SAS Institute. SAS Visual Analytics 6.2. Manuale dellutente, 2013
[3] SAS Institute. Step-by-Step Programming with Base SAS Software. Manuale
dellutente, 2001
[4] The PostgreSQL Global Development Group, PostgreSQL 10.2 Documentation.
University of California, 1994.
[5] Luca Ferrari. Introduzione a PostgreSQL, il pi湛 avanzato database OpenSource
al mondo. 際際滷s docente.
[6] SQL Developer, user manual, 2006.
[7] Lezioni seminariali di Elementi di SAS ed SQL, prof. G. Ragozini.
32

More Related Content

Similar to Tesina di fine seminario sas ed sql (20)

Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
GiacomoZorzin
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
maik_o
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Denis Tomada
Relazione Agic
Relazione AgicRelazione Agic
Relazione Agic
guestc09d24
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Paolo Morandini
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Filippo Muscolino
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
Alessandro Alpi
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Grogdunn
La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...
it Consult
Firebird SQL
Firebird SQLFirebird SQL
Firebird SQL
ulcera86
Un trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Un trittico vincente: ESP32, Raspberry Pi e EMQ X EdgeUn trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Un trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Antonio Musarra
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
Lorenzo Stacchio
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Luca Bressan
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Ventura
guest335584
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Francesco Cucari
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
Andrea Tosato
Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107
Pi Libri
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
GiacomoZorzin
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
Progetto e sviluppo di un'applicazionemobile multipiattaforma per il supporto...
maik_o
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia SharepointSviluppo Di Portali Tramite La Tecnologia Sharepoint
Sviluppo Di Portali Tramite La Tecnologia Sharepoint
Denis Tomada
Relazione Agic
Relazione AgicRelazione Agic
Relazione Agic
guestc09d24
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Tesi: Progetto e realizzazione di un sistema robusto di gestione dei dati per...
Paolo Morandini
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Filippo Muscolino
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
Alessandro Alpi
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Grogdunn
La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...La piattaforma josh - Scenario strategico della piattaforma software di it Co...
La piattaforma josh - Scenario strategico della piattaforma software di it Co...
it Consult
Firebird SQL
Firebird SQLFirebird SQL
Firebird SQL
ulcera86
Un trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Un trittico vincente: ESP32, Raspberry Pi e EMQ X EdgeUn trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Un trittico vincente: ESP32, Raspberry Pi e EMQ X Edge
Antonio Musarra
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
Lorenzo Stacchio
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
Davide Sito
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Luca Bressan
Tesi Marco Ventura
Tesi Marco VenturaTesi Marco Ventura
Tesi Marco Ventura
guest335584
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Francesco Cucari
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
Andrea Tosato
Imparare asp.net 107
Imparare asp.net 107Imparare asp.net 107
Imparare asp.net 107
Pi Libri

More from Marco D'Alessandro (13)

Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Marco D'Alessandro
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Marco D'Alessandro
La differenza c'竪 e si vede
La differenza c'竪 e si vedeLa differenza c'竪 e si vede
La differenza c'竪 e si vede
Marco D'Alessandro
Il modello educativo-formativo di Piazza dei Mestieri di Torino
Il modello educativo-formativo di Piazza dei Mestieri di TorinoIl modello educativo-formativo di Piazza dei Mestieri di Torino
Il modello educativo-formativo di Piazza dei Mestieri di Torino
Marco D'Alessandro
Disoccupazione in irlanda
Disoccupazione in irlandaDisoccupazione in irlanda
Disoccupazione in irlanda
Marco D'Alessandro
La soddisfazione in ambito sportivo.
La soddisfazione in ambito sportivo.La soddisfazione in ambito sportivo.
La soddisfazione in ambito sportivo.
Marco D'Alessandro
Il basket non 竪 solo matematica
Il basket non 竪 solo matematicaIl basket non 竪 solo matematica
Il basket non 竪 solo matematica
Marco D'Alessandro
Domanda di benzina in Ontario dal 1960 al 1975
Domanda di benzina in Ontario dal 1960 al 1975Domanda di benzina in Ontario dal 1960 al 1975
Domanda di benzina in Ontario dal 1960 al 1975
Marco D'Alessandro
Modello logistico
Modello logisticoModello logistico
Modello logistico
Marco D'Alessandro
Pseudo-R quadro
Pseudo-R quadroPseudo-R quadro
Pseudo-R quadro
Marco D'Alessandro
Processi stocastici e serie storiche
Processi stocastici e serie storicheProcessi stocastici e serie storiche
Processi stocastici e serie storiche
Marco D'Alessandro
Analisi delle corrispondenze multiple
Analisi delle corrispondenze multipleAnalisi delle corrispondenze multiple
Analisi delle corrispondenze multiple
Marco D'Alessandro
Il rischio 竪 dietro l'angolo
Il rischio 竪 dietro l'angoloIl rischio 竪 dietro l'angolo
Il rischio 竪 dietro l'angolo
Marco D'Alessandro
Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Classificazione automatica per ati ad alta dimensionalit: un approccio fuzzy...
Marco D'Alessandro
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Classificazione automatica per dati ad alta dimensionalit: un approccio fuzz...
Marco D'Alessandro
La differenza c'竪 e si vede
La differenza c'竪 e si vedeLa differenza c'竪 e si vede
La differenza c'竪 e si vede
Marco D'Alessandro
Il modello educativo-formativo di Piazza dei Mestieri di Torino
Il modello educativo-formativo di Piazza dei Mestieri di TorinoIl modello educativo-formativo di Piazza dei Mestieri di Torino
Il modello educativo-formativo di Piazza dei Mestieri di Torino
Marco D'Alessandro
La soddisfazione in ambito sportivo.
La soddisfazione in ambito sportivo.La soddisfazione in ambito sportivo.
La soddisfazione in ambito sportivo.
Marco D'Alessandro
Il basket non 竪 solo matematica
Il basket non 竪 solo matematicaIl basket non 竪 solo matematica
Il basket non 竪 solo matematica
Marco D'Alessandro
Domanda di benzina in Ontario dal 1960 al 1975
Domanda di benzina in Ontario dal 1960 al 1975Domanda di benzina in Ontario dal 1960 al 1975
Domanda di benzina in Ontario dal 1960 al 1975
Marco D'Alessandro
Processi stocastici e serie storiche
Processi stocastici e serie storicheProcessi stocastici e serie storiche
Processi stocastici e serie storiche
Marco D'Alessandro
Analisi delle corrispondenze multiple
Analisi delle corrispondenze multipleAnalisi delle corrispondenze multiple
Analisi delle corrispondenze multiple
Marco D'Alessandro
Il rischio 竪 dietro l'angolo
Il rischio 竪 dietro l'angoloIl rischio 竪 dietro l'angolo
Il rischio 竪 dietro l'angolo
Marco D'Alessandro

Tesina di fine seminario sas ed sql

  • 1. Universit`a degli Studi di Napoli Federico II Facolt`a di Scienze Politiche Corso di Laurea Magistrale in Scienze Statistiche per le Decisioni Relazione di fine Seminario Elementi di SAS ed SQL Analisi statistiche con SAS ed SQL Nozioni base per lutilizzo di SAS e la costruzione di un database con SQL Candidati: Barbara Amendola Erika Serotino Ida Riccio Marco DAlessandro Professore: Ragozini Giancarlo Anno Accademico 20172018
  • 2. Indice 1 Elementi di SAS 4 1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Struttura di un 束programma損 SAS . . . . . . . . . . . . . . . . . . 7 1.2.1 Cosa 竪 un SAS Data Set? . . . . . . . . . . . . . . . . . . . 8 1.2.2 SAS DATA STEP . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Esempio applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.1 Un dataset di esempio: CARS . . . . . . . . . . . . . . . . . 14 1.3.2 Statistiche descrittive . . . . . . . . . . . . . . . . . . . . . . 15 1.3.3 Regressione lineare . . . . . . . . . . . . . . . . . . . . . . . 17 2 Elementi di SQL 20 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 Creazione di un database . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2.1 Popolazione di un database . . . . . . . . . . . . . . . . . . 22 2.2.2 Interrogare il database . . . . . . . . . . . . . . . . . . . . . 22 2.3 Progettazione di un database Studenti . . . . . . . . . . . . . . . . 23 2.3.1 Il linguaggio SQL . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3.3 Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1
  • 3. Elenco delle 鍖gure 1.1 Funzionamento e componenti di SAS . . . . . . . . . . . . . . . . . 6 1.2 Struttura rettangolare di un archivio SAS . . . . . . . . . . . . . . 8 1.3 Flowchart dello schema operativo di un DATA STEP . . . . . . . . 11 1.4 Finestra principale di SAS Studio . . . . . . . . . . . . . . . . . . . 12 1.5 Tabella log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.6 Risultati dellesecuzione di un codice . . . . . . . . . . . . . . . . . 13 1.7 CARS dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.8 Caratteristiche delle variabili coinvolte nellanalisi . . . . . . . . . . 15 1.9 Statistiche descrittive di alcune variabili . . . . . . . . . . . . . . . 15 1.10 Gra鍖ci di sintesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.11 Output di un modello di regressione lineare semplice . . . . . . . . 18 1.12 Analisi dei residui come output gra鍖co di SAS . . . . . . . . . . . . 19 2.1 Schermata principale di PostgreSQL . . . . . . . . . . . . . . . . . 25 2.2 Creazione delle tabelle . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.3 Messaggio di corretta esecuzione del comando . . . . . . . . . . . . 26 2.4 Popolamento del database . . . . . . . . . . . . . . . . . . . . . . . 27 2.5 Prima query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6 Seconda query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.7 Terza query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.8 Quarta query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.9 Quinta query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2
  • 4. Elenco delle tabelle 2.1 Studenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2 Esami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3
  • 5. Capitolo 1 Elementi di SAS 1.1 Introduzione Il Statistical Analysis System (SAS)1 竪 un prodotto di base statistica ampia- mente di鍖uso, in quanto luso di archivi di dati organizzati 竪 divenuto ad oggi obbligatorio. Tale software 竪 molto simile allSPSS (acronimo di Statistical Package for the Social Sciences), ovvero programma integrato che richiama, di volta, in volta, speci鍖che applicazioni, de鍖nizione di un preciso linguaggio di comando per tutte le procedure, nascita dei "system 鍖le" (archivi contenenti dati e metadati: nome delle variabili, posizioni occupate nei record, nomi delle modalit, ecc.) "autodescrittivi". Pertanto, non essendo tale software predisposto alla lettura di archivi autodescrittivi quali 鍖le di tipo ASCII, EBCDIC, qualunque procedura SAS pu嘆 essere applicata esclusivamente ai SAS data set (archivi costituiti da dati pi湛) metadati organizzati che potranno poi essere sottoposti al trattamento di una o pi湛 applicazioni gi realizzate ed incluse nel sistema SAS.2 SAS 竪 un complesso di prodotti software integrati (sviluppati dal SAS Institute) che permettono ad un programmatore: linserimento, la ricerca e la gestione di dati (data entry); la generazione di report e gra鍖ci; 1 SAS 竪 un linguaggio di programmazione molto particolare, in quanto 竪 stato studiato per lanalisi statistica di dati. 2 SAS 竪 completamente diverso da tutti gli altri linguaggi di programmazione. 4
  • 6. la computazione di analisi statistiche e matematiche; la piani鍖cazione, la previsione ed il supporto alle decisioni; di fare ricerca operativa e project management; di gestire la qualit; di sviluppare applicazioni. Cos狸 come altri linguaggi di programmazione di quarta generazione orientati ai dati quali SQL (si veda al Capitolo 2), SAS assume una struttura dei 鍖le prede鍖nita e lascia al Sistema operativo lidenti鍖cazione dei 鍖le. Questo permette al program- matore e allutente di concentrarsi sulla gestione del dato trovandosi allinterno di una sorta di loop. Altre funzioni permettono la generazione di statistiche o report con la semplice de鍖nizione del dataset corretto. Al confronto di altri linguaggi di programmazione generici, poi, questo approccio permette allutente di preoccuparsi meno della conservazione dei dati per con- centrarsi maggiormente sulle informazioni immagazzinate. Questo permette di sfumare il concetto di programmazione permettendo ad utenti, che non ricadono nel concetto di programmatori, di sviluppare agilmente applicazioni. Il nocciolo del sistema SAS 竪 basato su un pool di applicazioni: Base SAS Software, utilizzato per la gestione dei dati; SAS procedures software, utilizzato per lanalisi ed il reporting; Macro facility, ossia un tool per estendere e personalizzare le applicazioni; DATA step debugger, ossia un tool per individuare gli eventuali problemi nelle applicazioni sviluppate; SAS windowing environment, ovvero un interfaccia gra鍖ca ed interattiva per eseguire e testare le applicazioni sviluppate nellambiente SAS. Osserviamo ora alcune caratteristiche degli elementi e funzionalit del software. 1. Struttura dei Dati: solitamente si utilizzano strutture rettangolari; tuttavia nel software in oggetto vi sono anche dati relazionali, nonch辿 vettori e matrici come oggetti; 5
  • 7. 2. Capacit gra鍖che: si pu嘆 trattare di gra鍖ca discreta e/o continua e ci嘆 risulta utile per analisi esplorative, presentazione analisi (report), veri鍖ca delladattamento di un modello. Alcuni pacchetti consentono anche gra鍖ci dinamici; 3. Flessibilit: 竪 infatti molto semplice eseguire calcoli o predisporre algoritmi non previsti dal pacchetto per prodotti con linguaggio come con il software in oggetto nonch辿 la disponibilit dello stesso di librerie di dominio pubblico in Statlib; 4. Disponibilit su piattaforme: mentre molti prodotti sono disponibili distintamente per alcuni sistemi operativi e non per altri, il software in oggetto ha il vantaggio di essere disponibile su pi湛 piattaforme, come Windows e Unix. Una caratteristica importante e vantaggiosa del sistema SAS 竪 che esso 竪 anche "interfacciato" con i principali data base esistenti su workstation ecc. (di cui un importante esempio 竪 Oracle). La struttura operativa del software pu嘆 essere rappresentata nella seguente immagine (Figura 1.1): Figura 1.1: Funzionamento e componenti di SAS 6
  • 8. 1.2 Struttura di un 束programma損 SAS SAS 竪 basato su di un linguaggio 束comando損 formato da 3 elementi fondamentali: 1. parole chiave SAS (es. PROC, PUT, DATA, FORMAT, etc); 2. nomi SAS (es. variabili, archivi, procedure, opzioni, etc); 3. caratteri speciali ed operatori. Esso 竪 inoltre basato su criteri sintattici molto simili a quelli dei pi湛 avanzati linguaggi di programmazione simbolici ad alto livello (ad esempio FORTRAN). Un programma SAS (o per meglio dire un lavoro e鍖ettuato con il SAS) si articola in uno o pi湛 passi, pi湛 propriamente detti STEP, che possono essere di due tipi: Il DATA STEP (letteralmente, passo di dati) serve, soprattutto, a creare e gestire i SAS DATA SET, ossia gli archivi organizzati, che potranno poi essere sottoposti al trattamento di una o pi湛 applicazioni gi realizzate ed incluse nel sistema SAS. Osserviamo che 竪 inoltre possibile utilizzare questo tipo di STEP anche per scrivere e far eseguire programmi del tutto simili a quelli di tipo tradizionale. Nella speci鍖ca applicazione pratica, inizia sempre con una particolare istruzione, ovvero la DATA; Il PROC STEP (letteralmente, passo di procedura), nello speci鍖co, serve a richiamare una procedura SAS. Le procedure sono in pratica applicazioni gi realizzate e rese disponibili agli utenti e organizzate in gruppi omogenei (che possono essere acquisiti, in base alle necessit). Generalmente, le procedure vengono applicate ai SAS DATA SET (non potendo trattare archivi non autodescrittivi, ossia normali 鍖le di tipo ASCII, EBCDIC, etc., ovvero nel linguaggio macchina) Il linguaggio di comando delle procedure 竪 ovviamente coerente con quello previsto dal DATA STEP. Nella speci鍖ca applicazione pratica, tutte le istruzioni SAS (anche quelle inserite nelle procedure) ter- minano con un preciso carattere ";" che fa da delimitatore, permettendo un tracciato libero nella scrittura dei programmi. 7
  • 9. 1.2.1 Cosa 竪 un SAS Data Set? Vediamo ora cosa si intende e da cosa 竪 costituito un SAS DATA SET, anche detto archivio SAS e rappresentato in seguito gra鍖camente nella Figura 2. Figura 1.2: Struttura rettangolare di un archivio SAS Come abbiamo gi accennato, un archivio SAS 竪 rettangolare e autodescrittivo, ovvero contiene sia i dati sia i metadati, dove per metadati si intendono le informa- zioni sul contenuto dei dati stessi (es. nomi, caratteristiche e posizioni occupate dalle variabili, numero di osservazioni, ecc.). Le variabili vengono identi鍖cate nei programmi SAS da nomi, che possono essere costituiti da stringhe di caratteri (max. 32): iniziano con una lettera o con un "underscore" (""), senza contenere alcun altro carattere speciale, ma solo lettere e cifre; non c竪 distinzione fra maiuscolo e minuscolo. Questa sintassi 竪 valida per tutti i nomi SAS (max. 8-32 byte), salvo limitate eccezioni; ad esempio, i nomi 8
  • 10. dei formati de鍖niti dallutente non possono terminare per un carattere numerico. Ogni variabile SAS ha inoltre vari attributi, quali ad esempio tipo, lunghezza, formato interno ed esterno, label. Osserviamo, inoltre, che in un archivio SAS oltre alle variabili de鍖nite dallutente esistono alcune variabili automatiche generate dal sistema con le relative informazioni (i gi citati metadati). Esse possono contenere informazioni di vario tipo (date, tempi, valori esadecimali, logiche, ecc.), ai 鍖ni della loro registrazione nei SAS DATA SET, ed hanno soltanto due possibili nature: numeriche; carattere. Tutti gli altri tipi di variabili sono ricondotti a queste due forme (ad esempio, per le variabili logiche viene utilizzato il valore numerico 0 per "falso" ed un qualunque altro valore, in genere 1, per "vero"). Le variabili numeriche possono contenere solo numeri, preceduti o meno da un segno e contenenti anche un possibile punto decimale. Sono accettate per嘆 anche particolari notazioni: un esempio notevole si ha quando si vuole indicare la mancanza di informazione in relazione ad un particolare "data value", ossia la presenza di un "missing value". La label (etichetta, ovvero un metadato) pu嘆 essere associata al nome di una variabile per mezzo di una apposita istruzione. Essa 竪 costituita, in particolare, da una stringa di caratteri (鍖no a 40 byte) e viene stampata da molte procedure accanto, od in luogo, del nome della variabile, permettendo cos狸 una pi湛 facile lettura degli output. 1.2.2 SAS DATA STEP Uno o pi湛 archivi SAS possono essere costruiti tramite un DATA STEP partendo da uno o pi湛 archivi ASCII (creati tramite un editore, un programma di video- scrittura o da un qualunque altro programma) e/o da uno o pi湛 archivi SAS gi creati in precedenza, nonch辿 anche o alternativamente da dati inseriti, in modo opportuno, al termine delle istruzioni che lo compongono. Un ulteriore alternativa 竪 quella di creare un archivio SAS "importando" archivi di diverso tipo (ad esempio di tipo Excel, dBase o Lotus, nel caso di personal computer). Tuttavia, ci嘆 non avviene mediante un DATA STEP, bens狸 utilizzando 9
  • 11. apposite procedure. Da un punto di vista pratico, un DATA STEP inizia con listruzione: DATA x; dove x identi鍖ca il nome dellarchivio SAS che stiamo costruendo. Lespressione x pu嘆, inoltre, essere costituita da: un nome SAS, ad esempio: DATA PROVA; un doppio nome, ad esempio: DATA LIB1.PROVA; da niente, ad esempio: DATA; Nello speci鍖co: nei casi a) e c) verr creato un archivio SAS temporaneo, mentre nel caso b), caratterizzato da due nomi separati da un punto, sar costruito un SAS DATA SET permanente. importante sottolineare che un DATA STEP termina quando ha inizio o un altro DATA STEP o un PROC STEP e lo stesso vale per i PROC STEP; nel caso di un utilizzo di tipo interattivo, invece, 竪 necessario terminare lultimo DATA STEP o PROC STEP con la seguente apposita istruzione: RUN; E inoltre una importante caratteristica generale, ossia valida per tutti i casi sopra citati, di un DATA STEP segue un preciso schema operativo, ovvero le istruzioni incluse nel DATA STEP vengono eseguite tante volte quante sono le osservazioni da trattare (a meno che non vi sia alcuna istruzione di tipo INPUT, SET, MERGE, o UPDATE, per le quali 竪 prevista una sola esecuzione dellistruzione stessa). Nello speci鍖co, viene letta unosservazione, trattata eseguendo tutte le istruzioni presenti nel DATA STEP ed in鍖ne viene scritta losservazione nellarchivio in output, dopodich辿 il sistema SAS legge una nuova osservazione, la tratta, la scrive e va avanti in questo modo 鍖no a quando terminano i record dellarchivio in ingresso. A quel punto questo DATA STEP 竪 terminato ed il sistema si predispone per eseguire lo STEP successivo. Tale processo viene rappresentato schematicamente nella Figura 3, mediante il seguente 鍖owchart. 10
  • 12. Figura 1.3: Flowchart dello schema operativo di un DATA STEP Prima di passare alla classi鍖cazione delle istruzioni DATA STEP, categorizziamo, pi湛 in generale, le istruzioni SAS. Queste ultime sono classi鍖cabili in base a vari criteri. Una prima divisione pu嘆 essere e鍖ettuata in base alle seguenti categorie: istruzioni utilizzate nel DATA STEP; istruzioni usate da (una o pi湛) PROC STEP (ovvero procedura); istruzioni che possono essere incluse in un qualsiasi punto dei programmi. Le istruzioni utilizzate nel DATA STEP sono poi classi鍖cabili in 4 gruppi: 11
  • 13. 1. gestione archivi (es. listruzione BY indica che larchivio va trattato per gruppi, CARDS indica linserimento di dati nel programma, DATA indica linizio del DATA STEP oppure il nome dellarchivio creato); 2. azione (es. listruzione ABORT cessa lesecuzione del DATA STEP, CALL richiama un sottoprogramma, OUTPUT registra una osservazione); 3. controllo (es. listruzione DO de鍖nisce un gruppo di istruzioni, SELECT de鍖nisce lesecuzione condizionata di gruppi di istruzioni, END termina una DO oppure una SELECT); 4. informazione (es. listruzione ARRAY de鍖nisce vettori e matrici, FORMAT stabilisce il formato di uscita, LABEL associa descrizioni alle variabili). Analogamente, esistono rispettive istruzioni nel PROC STEP, infatti le suddette istruzioni vengono utilizzate anche nelle procedure e, corrispondentemente alli- struzione DATA che indica linizio del DATA STEP, vi 竪 listruzione PROC che identi鍖ca una procedura da utilizzare. 1.3 Esempio applicativo I programmi SAS sono creati usando una interfaccia utente nota come SAS Studio. Questa 竪 la 鍖nestra di apertura dellambiente SAS (Figura 1.4). Sulla sinistra vi 竪 il men湛 a tendina utilizzato per navigare su varie speci鍖cit del programma. Sulla destra, poi, vi 竪 larea di lavoro usata per scrivere le linee di codice ed eseguirle. Figura 1.4: Finestra principale di SAS Studio 12
  • 14. Il men湛 a tendina contiene funzionalit per creare e gestire programmi. Esso consente anche lutilizzo delle funzionalit pre-installate con il programma. Lesecuzione di un codice viene fatta utilizzando la prima icona in alto a sinistra della relativa area di lavoro, o alternativamente utilizzando il tasto F3 di un qualsiasi computer. Il log del codice eseguito 竪 disponibile nella tabella Log, che descrive gli errori, gli avvisi o le note riguardanti lesecuzione del programma: questa 竪 la 鍖nestra dove si ottengono tutte le informazioni per risolvere il codice (Figura 1.5). Figura 1.5: Tabella log In鍖ne, il risultato dellesecuzione di un codice 竪 disponibile nella tabella dei risultati (Figura 1.6). Di default, i risultati sono formattati come tabelle html. Figura 1.6: Risultati dellesecuzione di un codice 13
  • 15. 1.3.1 Un dataset di esempio: CARS SAS Studio dispone di una serie di built-in datasets che sono gi installati nel soft- ware SAS. Essi possono essere esplorati ed usati per la formulazione di espressioni campionarie per lanalisi dei dati. Per esplorare questi dataset basta andare in Li- braries -> My Libraries -> SASHELP. Espandendo questa 鍖nestra, possiamo vedere la lista dei nomi di tutti i dataset gi disponibili in SAS. Poniamo la nostra attenzione, in particolare, su un dataset denominato CARS: esso contiene 428 osservazioni di 15 variabili, relative ad alcuni modelli di automobili del 2004. Visualizziamo le prime osservazioni del dataset nella Figura 1.7: Figura 1.7: CARS dataset Giusto per completezza, scriviamo le variabili coinvolte nellanalisi di questo da- taset (parzialmente elencate nel men湛 a tendina): marca, modello, tipo, origine, trasmissione, prezzo di listino, prezzo di fatturazione, grandezza del motore, cilindra- ta, potenza del motore, peso, lunghezza, interasse, distanza in citt ed in autostrada. Le variabili sono molto utili nellanalisi dei dati. Esse vengono usate in espressioni nelle quali 竪 applicata lanalisi statistica. Per esempio, considerando il nostro 14
  • 16. dataset, per esplorare le variabili e la loro tipologia basta fare doppio click su di esse (si veda la Figura 1.8). Figura 1.8: Caratteristiche delle variabili coinvolte nellanalisi 1.3.2 Statistiche descrittive Come primo passo, utilizzando alcune delle variabili di cui sopra, 竪 possibile produrre delle statistiche di sintesi utilizzando lopzione Tasks del men湛 a tendina. Per esempio, si pu嘆 produrre una sintesi delle variabili distanza su strada, distanza su autostrada e peso del veicolo, come illustrato sapientemente in Figura 1.9. Figura 1.9: Statistiche descrittive di alcune variabili 15
  • 17. Le statistiche descrittive mostrate riguardano la media, la deviazione standard, il minimo ed il massimo della distribuzione delle variabili oggetto di analisi. Lultima colonna della tabella, invece, indica il numero delle osservazioni usate nellanalisi. possibile, come anche per tutti i software di analisi statistica, creare dei gra鍖ci che illustrano pi湛 dettagliatamente le caratteristiche delle variabili considerate. I principali gra鍖ci che 竪 possibile creare con SAS sono: istogrammi (con annesse curve di densit stimate), diagrammi a barre verticali (con annessa suddivisione in gruppi), gra鍖ci a torta e box-plots. Questi sono sintetizzati in Figura 1.10: Figura 1.10: Gra鍖ci di sintesi 16
  • 18. Presentiamo brevemente le descrizioni dei gra鍖ci sopra inseriri: in alto a sinistra 竪 presente un istogramma (con funzione di densit stimata) della variabile potenza del motore; in alto a destra 竪 presente un diagramma a barre verticali della variabile lunghezza del veicolo raggruppata per il tipo di veicolo; in basso a sinistra 竪 presente, poi, un gra鍖co a torta della variabile tipo di veicolo, dove ciascuna parte rappresenta la percentuale di veicoli di quel tipo; in basso a destra, in鍖ne, sono presenti i boxplots della variabile potenza del motore, ciascuno dei quali ri鍖ette un determinato tipo di veicolo. 1.3.3 Regressione lineare Il modello di regressione lineare 竪 usato per identi鍖care la relazione tra una variabile dipendente ed una o pi湛 variabili indipendenti. Viene qui proposto un modello della relazione, e le stime dei valori dei parametri sono usate per sviluppare una equazione stimata di regressione. Vari test vengono poi usati per determinare se il modello 竪 soddisfacente: se il modello 竪 tale allora, lequazione di regressione stimata pu嘆 essere usata per prevedere i valori della variabile dipendente dati i valori assunti dalle variabili indipendenti. Lesempio proposto nelle seguenti righe riguarda la correlazione tra le variabili potenza del motore e peso del veicolo, quindi una regressione lineare semplice. In SAS la procedura PROC REG 竪 usata per trovare il modello di regressione lineare tra 2 variabili. A titolo puramente illustrativo mostriamo la linea di codice utilizzata per produrre i risultati, ma, si pu嘆 semplicemente sfruttare il solito men湛 a tendina per riportare direttamente i risultati del modello: PROC SQL; create table CARS1 as SELECT invoice,horsepower,length,weight FROM SASHELP.CARS WHERE make in (Audi,BMW); 17
  • 19. RUN; proc reg data=cars1; model horsepower= weight ; run; Quando viene eseguito il codice sopra riportato, otteniamo il seguente risultato, come esplicitato in Figura 1.11: Figura 1.11: Output di un modello di regressione lineare semplice dove la prima tabella riporta il numero di osservazioni usate per la regressione; la seconda tabella riporta i risultati dellANOVA e鍖ettuata sui residui; la terza tabella ha come indicatore principale lindice R2 della bont di adattamento del nostro modello ai dati a disposizione (opportunamente corretto in un modello di 18
  • 20. regressione lineare multiplo); lultima tabella riporta, in鍖ne, le stime dei parametri, i loro errori standard e la statistica-test t (con relativo p-value). Il codice riportato qualche riga fa, restituisce anche loutput gra鍖co delle varie stime dei parametri e dellanalisi dei residui, come mostrato nella Figura 1.12. Essendo questa una procedura avanzata di SAS, essa non si ferma esclusivamente nel dare i valori dellintercetta come output. Figura 1.12: Analisi dei residui come output gra鍖co di SAS 19
  • 21. Capitolo 2 Elementi di SQL 2.1 Introduzione SQL, acronimo di Structured Query Language, 竪 un linguaggio di riferimento sviluppato alla 鍖ne degli anni 70 e nasce allinterno dei laboratori di ricerca del- lIBM per lavorare con database che seguano il modello relazionale. Inizialmente, questo linguaggio si chiamava SEQUEL e fu implementato in un prototipo chiamato SEQUEL-XRM, e le sperimentazioni con tale prototipo porta- rono ad una revisione del linguaggio (SEQUEL/2) che in seguito cambi嘆 nome per motivi legali, diventando SQL. Nel corso degli anni 80 numerose compagnie commercializzarono prodotti basati su SQL, che divenne lo standard industriale per quanto riguarda i database relazionali. SQL 竪 un linguaggio per database basati sul modello relazionale progettato per: creare e modi鍖care schemi di database (DDL: Data De鍖nition Language); inserire, modi鍖care e gestire dati memorizzati (DML: Data Manipulation Language); interrogare i dati memorizzati (DQL: Data Query Language); creare e gestire strumenti di controllo ed accesso ai dati (DCL: Data Control Language). 20
  • 22. Nonostante il suo nome, non si tratta dunque solo di un semplice linguaggio di interrogazione, ma alcuni suoi sottoinsiemi si occupano della creazione, della gestione e dellamministrazione del database. 2.2 Creazione di un database La creazione di un database consiste nella creazione delle tabelle che lo compongono. In realt, prima di poter procedere alla creazione delle tabelle, normalmente occorre creare il database, il che di solito signi鍖ca de鍖nire uno spazio dei nomi separato per ogni insieme di tabelle. La sintassi SQL utilizzata per la creazione del database 竪 la seguente: CREATE DATABASE nome_database ed una volta creato il database 竪 possibile creare le tabelle che lo compongono mediante listruzione CREATE TABLE, procedura che sar illustrata nella sezione dedicata alla parte applicativa. Durante la creazione delle tabelle possono poi essere speci鍖cate due chiavi. Una chiave primaria 竪 un insieme di attributi che viene utilizzata per individuare univocamente una t-upla o riga presente in una tabella; ad esempio, il codice 鍖scale per la tabella contenente il personale di unazienda. Una chiave esterna, invece, 竪 un vincolo di integrit referenziale tra due o pi湛 tabelle; essa identi鍖ca una o pi湛 colonne di una tabella (referenziante) che referenzia una o pi湛 colonne di unaltra tabella (referenziata), dunque, rappresenta uno o pi湛 campi che fanno riferimento alla chiave primaria di unaltra tabella. Ad esempio, si supponga di disporre di due tabelle: una tabella CUSTOMER, in cui sono inclusi tutti i dati dei clienti e una tabella ORDERS, in cui sono contenuti tutti gli ordini dei clienti. Il vincolo impostato stabilisce che tutti gli ordini devono essere associati a un cliente presente nella tabella CUSTOMER. In questo caso, verr posizionata una chiave esterna sulla tabella ORDERS che sia in relazione con la chiave primaria della tabella CUSTOMER. In questo modo, 竪 possibile garantire che tutti gli ordini della tabella ORDERS sono correlati a un cliente presente nella tabella CUSTOMER. Cio竪, nella tabella ORDERS non possono essere contenute informazioni relative a un cliente che non 竪 incluso nella tabella CUSTOMER. 21
  • 23. 2.2.1 Popolazione di un database Col termine popolazione di un database si intende lattivit di inserimento dei dati al suo interno. In un database relazionale ci嘆 corrisponde alla creazione delle righe che compongono le tabelle che costituiscono il database. Listruzione SQL che e鍖ettua linserimento di una riga in una tabella 竪 INSERT. La sintassi con cui essa viene usata pi湛 comunemente 竪: INSERT INTO nome tabella (elenco delle colonne) VALUES (valori attribuiti) Questo costrutto permette di inserire i dati in un dataset relazionale mentre nella sezione successiva vedremo come 竪 possibile estrarre i dati. 2.2.2 Interrogare il database DQL (Data Query Language linguaggio di interrogazione dei dati) comprende i comandi per leggere ed elaborare i dati presenti in un database. Linterrogazione (o query) 竪 la funzionalit pi湛 usata di un database e le clausole di cui dispone listruzione SELECT sono numerose ed a volte possono dar luogo a combinazioni piuttosto complicate, ma interessanti. Col comando SELECT, infatti, 竪 possibile estrarre i dati, in modo mirato, dal database mediante lutilizzo di costrutti di programmazione denominati appunto query. La sintassi completa 竪 la seguente: select*from , di cui si vedr nel dettaglio nella parte applicativa, sono clausole rispettivamente di proiezione, in quanto stabiliscono quali colonne devono essere riportate nel risultato 鍖nale, e di selezione poich辿 stabiliscono da quale tabella estrarre i dati; queste sono le uniche clausole obbligatorie ma 竪 possibile aggiungere ulteriori clausole come where che permette di de鍖nire un 鍖ltro sulle righe che saranno analizzate oppure join che combina solo le righe delle due tabelle che soddisfano un certo predicato di confronto, come in unoperazione di intersezione. Le nozioni basilari 鍖n qui esposte saranno illustrate in modo esempli鍖cativo mediante il caso studio presente nella sezione successiva. 22
  • 24. 2.3 Progettazione di un database Studenti In questa sede di lavoro, lobiettivo 竪 stato quello di progettare un database riguardante lesito dellesame di Statistica di alcuni studenti universitari. Ciascuno di essi 竪 identi鍖cato dal nome, cognome, matricola ed et. Per quanto concerne lesame, esso 竪 identi鍖cato dal codice del corso di laurea, dallo studente, dal mese in cui lesame 竪 stato sostenuto e dalla votazione. Per poter progettare il data base in questione, proseguiamo per passi. Innanzitutto focalizziamoci sulle informazioni relative agli studenti, che possono essere sintetizzate nella tabella che segue: Matricola Cognome Nome Et Tabella 2.1: Studenti Procediamo adesso con le ulteriori informazioni a nostra disposizione, riguardanti questa volta lesame sostenuto dagli studenti coinvolti nellanalisi. In modo analogo: CodiceCorso Studente Mese Voto Tabella 2.2: Esami 2.3.1 Il linguaggio SQL Il passo successivo consiste nel tradurre le due tabelle illustrate pocanzi, in linguaggio SQL. /*Table:STUDENTI */ create table STUDENTI( MATRICOLA NUMERIC not null, 23
  • 25. COGNOME CHAR(20) not null, NOME CHAR(20) not null, ETA NUMERIC not null, constraint PK_STUDENTI primary key(MATRICOLA) ); Si 竪 ipotizzato che: la matricola relativa a ciascuno studente sia di natura numerica; il cognome ed il nome siano rappresentati da una stringa di 20 caratteri di lunghezza 鍖ssa; let sia di natura numerica. /*Table:ESAMI */ create table ESAMI( CODICECORSO NUMERIC not null, STUDENTE NUMERIC not null references STUDENTI(MATRICOLA), MESE CHAR(20) not null, VOTO INTEGER not null, constraint PK_ESAMI primary key(CODICECORSO, STUDENTE, MESE) ); Per quanto concerne le variabili contenute nella tabella ESAMI abbiamo, in questo caso, ipotizzato che: il codice del corso di laurea sia di tipo numerico; ogni studente sia univocamente identi鍖cato da un codice alfanumerico a 3 cifre (ciascuno studente, inoltre, 竪 identi鍖cato dagli elementi della matrice STUDENTI, come da riferimento); il mese di conseguimento dellesame sia identi鍖cato da una stringa di 20 caratteri di lunghezza 鍖ssa; il voto dellesame sia un numero intero. 24
  • 26. 2.3.2 PostgreSQL Il database progettato nella fase precedente in tramite lo schema relazionale verr, nel seguito di questo paragrafo, tradotto in linguaggio SQL. Come software di DataBase Management System (DBMS) 竪 stato scelto PostgreSQL.3 Quindi, come primo passo lanciamo linterfaccia gra鍖ca pgadmin e creiamo un nuovo database, denominato STUDENTI. pgadmin, in particolare, 竪 unapplicazione C++ libera, una interfaccia gra鍖ca che consente di amministrare in modo sempli鍖cato database di PostgreSQL: essa permette di creare un database da zero, creare le tabelle ed eseguire operazioni di ottimizzazione sulle stesse. Presenta, inoltre, un feedback sulla creazione delle tabelle per evitare eventuali errori. Figura 2.1: Schermata principale di PostgreSQL Il passo successivo consiste nellaprire il pannello per il codice SQL e lanciare i vari comandi per creare le tabelle. Nel nostro caso, le tabelle da creare sono 2. 3 un completo DBMS ad oggetti rilasciato con licenza libera (stile Licenza BSD). Spesso viene abbreviato come "Postgres", sebbene questo sia un nome vecchio dello stesso progetto. In PostgreSQL, tutti gli oggetti (con leccezione di ruoli e tablespace) sono situati in uno schema. Esso agisce e鍖ettivamente come un namespace, permettendo agli oggetti con lo stesso nome di coesistere nella stessa base di dati. 25
  • 27. Figura 2.2: Creazione delle tabelle Questo 竪 il risultato della corretta esecuzione dei comandi: Figura 2.3: Messaggio di corretta esecuzione del comando Passiamo, adesso, alla fase successiva riguardante il popolamento del database. Tale procedura 竪 eseguibile mediante i comandi di seguito riportati: 26
  • 28. Figura 2.4: Popolamento del database 2.3.3 Query La prima query che andremo ad e鍖ettuare estrae tutte le informazioni degli studenti: /*Estrae tutte le informazioni degli studenti*/ select*from studenti Di seguito 竪 riportato loutput della query: Figura 2.5: Prima query 27
  • 29. Il risultato della query produce, dunque, la tabella studenti, cos狸 come dichiarata inizialmente: le sue colonne sono rappresentate dalle variabili matricola, cogno- me, nome ed et, mentre le sue righe (osservazioni) sono rappresentate dai 7 studenti. La seconda query che andremo ad e鍖ettuare estrae tutte le informazioni riguardanti gli esami sostenuti dagli studenti coinvolti nellanalisi: /*Estrae tutte le informazioni degli esami*/ select * from esami Di seguito 竪 riportato loutput della query: Figura 2.6: Seconda query Il risultato della query, in questo caso, 竪 rappresentato dalla tabella esami, cos狸 come anchessa dichiarata inizialmente: le sue colonne sono questa volta rappresentate dalle variabili codice corso, studente, mese e voto. La terza query che andremo ad e鍖ettuare estrae il numero di matricola degli studenti ed il voto desame: /*Estrarre voto desame e matricola dello studente */ select voto, studente from esami. 28
  • 30. Di seguito 竪 riportato loutput della query: Figura 2.7: Terza query Il risultato della terza query 竪 rappresentato solamente da due colonne, ossia quella della variabile voto e quella della variabile studente, entrambe contenute allinterno della macrotabella esami in precedenza costruita. La quarta query che andremo ad e鍖ettuare 竪 pi湛 articolata rispetto alle precedenti, ed estrae le informazioni degli studenti il cui voto desame 竪 maggiore di quello dello studente Costa Fausto (24). select * from studenti join esami on matricola=studente where voto > any (select voto from esami join studenti on studente=matricola where cognome=costa and nome=fausto); 29
  • 31. Di seguito 竪 riportato loutput della query: Figura 2.8: Quarta query Molto intuitivamente, si pu嘆 vedere come la query estrae dal database iniziale tutte le informazioni relative agli studenti il cui voto allesame di Statistica 竪 superiore a quello di un altro studente, dichiarato nella query stessa. La quinta ed ultima query che andremo ad e鍖ettuare ricalca quella precedente, ed in questo caso estrae le informazioni degli studenti il cui voto desame 竪 inferiore rispetto alla votazione dello studente Costa Fausto: select * from studenti join esami on matricola=studente where voto < any (select voto from esami join studenti on studente=matricola where cognome=costa and nome=fausto); 30
  • 32. Di seguito 竪 riportato loutput dellultima query: Figura 2.9: Quinta query Di鍖erentemente dalla query precedente, questa volta il risultato 竪 rappresentato da una sola osservazione poich竪 solamente uno studente presenta voto minore rispetto a quanto dichiarato nella query stessa. 31
  • 33. Bibliogra鍖a [1] Ron Cody. Learning SAS by Example: a programmers guide. North Carolina (USA), SAS Press, 2007 [2] SAS Institute. SAS Visual Analytics 6.2. Manuale dellutente, 2013 [3] SAS Institute. Step-by-Step Programming with Base SAS Software. Manuale dellutente, 2001 [4] The PostgreSQL Global Development Group, PostgreSQL 10.2 Documentation. University of California, 1994. [5] Luca Ferrari. Introduzione a PostgreSQL, il pi湛 avanzato database OpenSource al mondo. 際際滷s docente. [6] SQL Developer, user manual, 2006. [7] Lezioni seminariali di Elementi di SAS ed SQL, prof. G. Ragozini. 32