H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e...

60
UNIVERSIT ` A DEGLI STUDI DI PADOVA FACOLT ` A DI SCIENZE STATISTICHE Quaderni ASID Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008

Transcript of H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e...

Page 1: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

UNIVERSITA DEGLI STUDI DI PADOVA

FACOLTA DI SCIENZE STATISTICHE

Quaderni ASID

Quaderno 1

Claudio Agostinelli e Silvia Sartorelli

Introduzione al linguaggio di SAS System

2008

Page 2: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e
Page 3: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

INDICE

1. La struttura e la sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1 L’interfaccia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Il linguaggio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Le fasi del DATA STEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.4 L’applicazione Enterprise Guide . . . . . . . . . . . . . . . . . . . . . . . . . 5

2. L’Acquisizione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.1 L’ambiente di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 L’acquisizione di dati ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 L’acquisizione automatica dei file . . . . . . . . . . . . . . . . . . . . . . . . 14

3. Procedure utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.1 Alcuni concetti generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.2 PROC SORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3 PROC PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.4 PROC FSVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.5 PROC CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.6 PROC FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4. Manipolazione di dataset in formato .sas7bdat . . . . . . . . . . . . . . . . . . . 22

4.1 Creazione di sottoinsiemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.2 Assegnazione e riclassificazione . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3 Unione di dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5. Esempi di procedure statistiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.1 PROC FREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.2 PROC UNIVARIATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.3 PROC REG, PROC GPLOT e PROC CORR . . . . . . . . . . . . . . . . . 33

5.4 PROC TABULATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5.5 PROC ANOVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5.6 PROC CLUSTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5.7 PROC FACTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.8 PROC LOGISTIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5.9 PROC CORRESP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

6. Altro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.1 Dataset di versioni diverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.2 Cambio di formato: numerico vs carattere . . . . . . . . . . . . . . . . . . . 51

6.3 Ricostruzione di gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

6.4 Accenni sulle macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Page 4: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

PREFAZIONE

Lo scopo di questo quaderno e quello di fornire a studenti e tesisti gli strumenti per iniziare

l’utilizzo del pacchetto statistico SAS. Il testo richiama l’attenzione sugli aspetti pratici di

acquisizione e manipolazione dei dati e su alcune procedure statistiche.

Lontano dall’esaurire l’argomento, il quaderno mette l’utente in grado di cogliere ra-

pidamente le caratteristiche fondamentali del programma e di avviarsi autonomamente al-

l’approfondimento delle procedure che gli saranno necessarie per lo svolgimento del proprio

lavoro.

La presente dispensa costituisce un aggiornamento (non sostanziale) della seconda stesu-

ra, che e datata settembre 2002. Rispetto alla seconda stesura sono stati corretti e aggiunti

alcuni dettagli (soprattutto nel capitolo 4), il capitolo 1 e stato aggiornato con riferimento

alla versione di SAS 9.1 ed il paragrafo relativo all’applicazione Analyst e stato sostituito

con uno relativo all’applicazione Enterprise Guide.

La presente dispensa e stata scritta in LATEX.

Ringraziamo tutti quelli che gia ci hanno aiutato o che lo faranno in futuro con preziosi

suggerimenti. Gli autori sono raggiungibili per e-mail ai seguenti indirizzi:

Claudio Agostinelli: [email protected]

Silvia Sartorelli: [email protected]

Padova, lı 30 agosto 2008

Claudio Agostinelli, Silvia Sartorelli

Questa opera viene rilasciata sotto la licenza Creative Commons: Attribuzione - Non

commerciale - Condividi allo stesso modo 2.5 Italia. Il fruitore e libero di riprodurre, di-

stribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare

quest’opera e di modificare quest’opera.

Alle seguenti condizioni: deve attribuire la paternita dell’opera nei modi indicati dall’au-

tore o da chi ha dato l’opera in licenza; non si puo usare quest’opera per fini commerciali;

se si altera o trasforma quest’opera, o se la si usa per crearne un’altra, si puo distribuire

l’opera risultante solo con una licenza identica a questa.

Ogni volta che si usa o si distribuisce quest’opera, si deve farlo secondo i termini di questa

licenza, che va comunicata con chiarezza. In ogni caso, si puo concordare col titolare dei

diritti d’autore utilizzi di quest’opera non consentiti da questa licenza.

Questa licenza lascia impregiudicati i diritti morali.

Page 5: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. LA STRUTTURA E LA SINTASSI

Il SAS e un pacchetto statistico molto potente e complesso. E strutturato in “parti”, che

vengono denominate moduli. Il modulo principale e SAS\Base, al quale si possono aggiun-

gere altri moduli di interesse. Nell’aula informatica del nostro dipartimento (ASID) sono a

disposizione SAS\STAT (che e il modulo deputato alle elaborazioni statistiche), SAS\IML

(per il calcolo matriciale), SAS\GRAPH (per la composizione di grafici ad alta risoluzio-

ne), SAS\ETS (per l’analisi delle serie storiche) etc. Questa dispensa fa riferimento alla

versione 9.1.

Nel SAS, come nella maggior parte dei programmi, possiamo distinguere due componenti:

il programma vero e proprio e la sua interfaccia.

1.1 L’interfaccia

Nel sistema operativo che attualmente e adottato in ASID (Windows XP) l’interfaccia grafica

e costituita sostanzialmente da cinque finestre e da un certo numero di menu a tendina. Le

tre finestre principali hanno ciascuna il proprio determinato scopo e sono chiamate:

• EDITOR

• OUTPUT

• LOG

Tecnicamente le finestre di EDITOR sono due. Quella di PROGRAM EDITOR si attiva solo

a richiesta ed era quella principale fino alle versione 7, sostituita da quella attuale, migliorata

e percio chiamata ENHANCED EDITOR. Dalla versione 8 sono attive anche le finestre:

• EXPLORER

• RISULTATI

Il SAS e un programma in grado di compiere diverse elaborazioni, alcune delle quali piuttosto

complesse e di gestire con facilita enormi quantita di dati, ma perche compia tutte queste

operazioni, e necessario “indicargli come fare”.

Nella finestra di EDITOR si scriveranno le istruzioni che desideriamo far eseguire a SAS.

Queste dovranno essere scritte in un linguaggio che ha precise regole di sintassi.

Nella finestra di OUTPUT verranno visualizzati i risultati che si ottengono dalla elabo-

razione delle istruzioni eseguite da SAS.

Nella finestra di LOG compariranno informazioni sull’elaborazione come la segnalazione

di errori di sintassi nella scrittura dei comandi o il nome degli archivi che si stanno elaborando,

il numero di osservazioni presenti e cosı via.

La finestra di EXPLORER permette di navigare tra directory e file, che sono risorse

predefinite del programma o collegate dall’utente, mentre la finestra dei RISULTATI per-

mette di navigare comodamente nella finestra di OUTPUT tra i risultati delle elaborazioni,

organizzati in una struttura ad albero.

Page 6: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 2

Le cinque finestre vengono aperte automaticamente all’avvio del programma; noi pos-

siamo passare dall’una all’altra comodamente utilizzando i comandi da tastiera o il mouse

o i menu, rendendo attiva di volta in volta la finestra che ci serve. Altre finestre vengono

automaticamente avviate quando sono specificate richieste particolari come ad esempio la

creazione di un grafico.

La composizione dei menu dipende dalla finestra attiva e puo variare notevolmente. La

disposizione relativa alla finestra di EDITOR e la seguente da sinistra a destra (per ogni

menu riportiamo solo le voci che sono essenziali):

File

Nuovo programma Apre una nuova finestra di Enhanced Editor.

Apre programma Legge un file esistente e lo carica nella finestra attiva.

Salva Salva il contenuto della finestra attiva.

Salva con nome Salva il contenuto della finestra attiva dando la possibilita di speci-

ficare il nome del file.

Importa dati Permette di importare direttamente un file di dati memorizzato in un

formato diverso dal formato di SAS.

Esporta dati Permette di esportare direttamente i dati in file di formati diversi.

Stampa Stampa il contenuto della finestra attiva.

Esci Termina la sessione di lavoro.

Modifica Nei sottomenu di questa voce sono disponibili le operazioni di copia, incolla,

taglia, seleziona, trova e sostituisci, comuni a tutte le applicazioni di Windows.

Visualizza Permette lo spostamento e il richiamo di finestre anche nel caso fossero state

precedentemente chiuse.

Strumenti SAS offre un insieme di strumenti e programmi di utilita pronti all’uso:

Query Finestra di un’applicazione interattiva che semplifica il processo di costruzione

ed elaborazione di Query SQL.

Editor delle Tabelle Richiama la finestra VIEWTABLE che permette di visualiz-

zare, modificare e creare dataset.

Editor dei grafici Applicazione interattiva per la modifica di grafici creati in

SAS o importati da altre applicazioni.

Editor dei prospetti Richiama una finestra per l’uso di PROC REPORT (la PROC

REPORT combina caratteristiche di varie procedure in un unico strumento di report

writing che puo produrre una varieta di prospetti).

Editor delle immagini Permette di leggere, manipolare e memorizzare immagini.

Editor dei testi Permette di aprire diverse finestre per creare, modificare, salvare

e mandare in esecuzione programmi SAS.

Esegui Questo e un menu specifico della finestra di EDITOR di SAS.

Sottometti Esegue le istruzioni contenute nella finestra.

Richiama ultima sottomissione Richiama nella finestra le istruzioni eseguite con

l’ultimo Sottometti.

Page 7: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 3

Sottometti prima riga Esegue le istruzioni che sono sulla prima riga della finestra.

Soluzioni Richiama un elenco di soluzioni ed applicazioni pronte all’uso tramite finestre,

utilizzabili o meno a seconda del tipo di licenza in possesso dell’utente.

Finestra Serve per la gestione delle finestre, ha la stessa funzione svolta in tutte le altre

applicazioni di Windows.

? Attiva l’aiuto in linea.

1.2 Il linguaggio

Nel linguaggio SAS i comandi principali possono essere classificati in due grandi categorie

chiamate “passi” (Step):

• I comandi di un passo di DATA (DATA STEP) servono per l’acquisizione di dati da un

archivio in formato ASCII e per la creazione, la gestione e la manipolazione di insiemi

di dati (dataset) in formato SAS.

• I comandi di PROC STEP sono procedure per l’analisi dei dati. In ogni PROC STEP viene

implementato un insieme di metodi statistici, come ad esempio il calcolo di indici di

posizione quali medie di vario ordine (media, mediana, moda, quantili) e di variabilita

(varianza, scarto interquartile). Un elenco delle procedure disponibili puo essere trovato

nell’help in linea oppure nei manuali di SAS.

Alcuni particolari PROC STEP servono per l’acquisizione di dati da formati diversi da

quello ASCII. In particolare esistono procedure per l’acquisizione di dati in formato

Database (versioni DB3 e DB4).

Infine alcuni comandi di PROC STEP servono per visualizzare e/o stampare i dati e i

risultati delle analisi che abbiamo svolto.

Esistono in SAS altri comandi che non rientrano in queste due categorie, in particolare

i comandi globali e i comandi macro. I comandi globali servono per modificare alcuni pa-

rametri quali ad esempio il numero di colonne da utilizzare per visualizzare e/o stampare i

risultati. I comandi macro servono per automatizzare o rendere piu flessibile l’utilizzo dei

comandi di Step. In questa introduzione al linguaggio SAS trova posto solo qualche accenno

al linguaggio delle macro, ci si puo riferire al manuale di SAS per una completa introduzione

all’argomento.

Come ogni linguaggio di programmazione anche il linguaggio di SAS segue alcune regole

generali di sintassi per la formazione dei comandi.

Regole di sintassi per i comandi

- Ogni istruzione o comando finisce sempre con il punto e virgola (;).

- Il linguaggio SAS non distingue le lettere maiuscole dalle minuscole. Quindi le

istruzioni possono essere scritte sia in lettere maiuscole che in minuscolo.

- Le istruzioni possono essere scritte sulla stessa riga, perche cio che indica la fine di una

istruzione e l’inizio della successiva e il punto e virgola (;).

- Le istruzioni possono continuare su righe successive, la cosa importante e che nessun

comando, nome di variabile o altro venga “spezzato”

Page 8: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 4

- Le istruzioni possono iniziare in qualsiasi colonna.

- Le parole che compongono una istruzione sono separate da uno spazio o da un operatore

(un esempio di operatore e il segno di uguale =).

Infine l’utilizzo di commenti, di rientri per evidenziare parti di una istruzione, di linee vuote

tra un insieme di istruzioni e l’altro e qualsiasi altra precauzione che renda il programma

piu chiaro sono regole che fanno parte della buona programmazione, rendono il lavoro di

scrittura piu facile e il riutilizzo dei programmi agevole. L’Enhanced Editor ci facilita il lavoro

colorando diversamente ed in modo personalizzabile le parti del programma a seconda che

siano istruzioni, parametri, opzioni, commenti, etc. I commenti vanno inserite tra i simboli

/* commenti */ oppure * commento ;, quest’ultima pero funziona solo se non sono presenti

“;” nel testo, perche il primo viene interpretato come conclusione del commento.

Le regole che abbiamo visto riguardano le istruzioni, le regole di sintassi proprie per i

nomi delle variabili o dei dataset di SAS sono le seguenti:

Regole di sintassi per i nomi delle variabili e dei dataset

- I nomi delle variabili possono essere formati con un numero di caratteri da 1 a 32.

- Il primo carattere deve essere una lettera o il sottolineato ( underscore).

- I caratteri che seguono il primo possono essere lettere, numeri o il sottolineato.

- Gli spazi non possono essere usati per definire il nome di una variabile o di un dataset.

Le variabili inoltre hanno degli attributi:

NAME: il nome della variabile.

TYPE: il tipo di variabile:

• Numeriche. Le variabili di tipo numerico possono contenere solo numeri.

• Alfanumeriche. Le variabili di tipo alfanumerico possono contenere numeri, lettere

e caratteri speciali (la stella *, la percentuale %, . . . ).

LENGTH: la lunghezza del contenuto di una variabile, il valore predefinito (di default) e di

otto caratteri, il valore massimo e di 256 caratteri.

LABEL: contiene una descrizione del contenuto della variabile.

INFORMAT: serve per definire le caratteristiche della variabile in fase di acquisizione.

FORMAT: indica come deve essere stampato e/o visualizzato il contenuto della variabile.

1.3 Le fasi del DATA STEP

Per sfruttare a pieno le potenzialita di manipolazione dei dati che SAS ci mette a disposi-

zione e necessario fin da ora conoscere quali sono le fasi che compongono un DATA STEP. Si

possono distinguere due fasi principali: nella prima, chiamata Fase di compilazione, tutto

il contenuto della finestra di EDITOR sara analizzato per verificare che non vi siano errori

di sintassi e che quindi SAS sia in grado di interpretare tutti i comandi. Successivamente,

se non sono stati riscontrati errori, il contenuto della finestra di EDITOR viene compilato,

Page 9: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 5

cioe tradotto in un linguaggio piu vicino alla macchina ed eseguito. Se invece vi sono errori

di sintassi allora un messaggio comparira nella finestra di LOG e a seconda della gravita

dell’errore l’esecuzione verra terminata oppure proseguita eliminando le righe di comandi

coinvolte nell’errore.

Nella seconda fase, chiamata Fase di esecuzione, i comandi del DATA STEP vengono

eseguiti per tutte le osservazioni presenti nel dataset. Quindi normalmente i comandi che

vengono specificati sono eseguiti su tutte le osservazioni. Questo fatto differisce da molti

programmi che siamo abituati ad adoperare e spesso e necessario un po’ di tempo prima

di riuscire a cogliere questo aspetto. Nel diagramma di flusso rappresentato in figura 1.1 a

pagina 7 abbiamo sintetizzato le fasi di un DATA STEP.

1.4 L’applicazione Enterprise Guide

Negli ultimi anni i produttori di SAS hanno dedicato molte risorse ed attenzione a programmi

che permettano l’uso di SAS anche da parte di utenti inesperti. Enterprise Guide e appunto

un applicativo Windows grazie al quale utenti privi di conoscenze SAS e di esperienza di

programmazione possono perseguire i propri obiettivi di manipolazione dei dati e di ricerca

statistica.

Sostanzialmente Enterprise Guide e un generatore di codice tramite menu, finestre di

dialogo e funzionalita drag-and-drop. Non e piu necessario conoscere, scrivere e mandare in

esecuzione il codice proprio di SAS ma sara sufficiente richiamare tramite menu o tramite

la finestra Elenco dei processi le finestre appropriate, compilarne i campi e ottenere cosı

di procedere ad analisi statistiche, alla gestione di dati, alla scrittura di report, etc. Il codice

ottenuto in questa maniera e modificabile1 tramite un editor interno oppure puo essere

salvato e riutilizzato nel SAS tradizionale o in ambiente batch.

Enterprise Guide e un programma a parte, che va installato separatamente, ma che poi si

appoggia al SAS vero e proprio. All’avvio presenta una finestra in cui propone di aprire un

progetto preesistente oppure di aprire un nuovo progetto, un nuovo programma SAS oppure

nuovi dati. L’insieme dei dati, del codice generato, degli eventuali risultati in forma di tabelle

e grafici, compreso il flusso del processo che li ha generati, viene definito appunto Progetto

e puo essere salvato in un’unica entita che avra estensione .egp.

L’ambiente di lavoro iniziale prevede tre finestre:

Designer dei progetti: e l’area di lavoro del progetto ed e formata principalmente dalla

scheda Flusso dei processi, che contiene uno o piu flussi di processo, gli oggetti

costituenti il progetto e la relazione tra di essi e poi da altre schede che di volta

in volta saranno i dati e/o le tabelle di risultati, etc. Ogni oggetto e rappresentato

tramite un’icona e queste sono collegate tra loro da frecce che simboleggiano il flusso

dei processi

Explorer dei progetti: presenta la struttura ad albero del progetto e permette l’accesso

alle singole compenenti e la loro gestione comprese la cancellazione ed il salvataggio

Stato dei processi: consente di seguire le fasi del processo mandato in esecuzione e

di controllarne l’andamento; rimane vuota alla conclusione del processo avviato ed il

relativo log sara accessbile come nodo del progetto dall’Explorer

Possiamo caricare dati esistenti da file gia in formato .sas7bdat o anche in altri formati

di input oppure possiamo inserirli direttamente in una matrice. Una volta caricati i dati si

1 seppure con forti limiti, come vedremo

Page 10: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 6

potra accedere ai menu per la manipolazione (menu Dati), il controllo, la descrizione (menu

Descrivi) e l’analisi dei dati (menu Analizza e Grafico). Una volta richiamate le finestre

relative alle voci di questi menu, si dovranno compilare i campi richiesti ma la trattazione

di questa parte richiederebbe troppo spazio e va oltre gli intenti della presente dispensa. Si

fa notare, pero, che ciascuna finestra permette la visualizzazione del codice (tramite il tasto

Anteprima codice in basso a sinistra) ed eventualmente la modifica tramite il seguente

Inserisci codice, ma sono possibili solo modifiche parziali perche l’inserimento del codice

dell’utente e permesso solo in alcuni punti del codice generato. Per avere pieno controllo

del codice bisognera salvarlo separatamente in un file esterno e reimportarlo aprendo una

propria finestra di codice (File >> Apri >> Codice).

Il repertorio di procedure statistiche e grafiche e molto vasto. Si possono calcolare sta-

tistiche descrittive e test, studiare modelli con analisi della varianza e regressioni, inoltre ci

sono voci per analisi di dati di sopravvivenza, delle serie storiche e alcune tecniche multiva-

riate come l’analisi dei cluster e l’analisi fattoriale. L’elenco completo dei processi accessibili

e visualizzabile in una finestra apposita, chiamata appunto Elenco dei processi, evocata

da Visualizza >> Elenco dei processi. La finestra presenta due schede in cui i processi

sono elencati per categoria oppure per nome ed e possibile “fissarla” in modo che rimanga

come finestra nell’ambiente di lavoro.

I risultati delle singole analisi ed i grafici sono presentati in schede separate della finestra

principale e tutto il progetto e organizzato nell’albero dell’Explorer dei progetti. Le

schede possono essere chiuse per comodita e parsimonia ma ogni singolo risultato rimane

come un nodo dell’albero e puo da qui essere ripreso, cancellato, sviluppato e stampato.

Page 11: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

1. La struttura e la sintassi 7

Fig. 1.1: Diagramma di flusso delle azioni in un passo di DATA

Fase di compilazione

Fase di esecuzione

Controllo della sintassi

Compilazione dei comandi

Creazione di:

un buffer di input

una descrizione del buffer

un vettore (record) per i dati

Inizio del passo di DATA

C’e un record da leggere? Chiusura del dataset

Lettura di un record

Esecuzione di altri comandi

Esempio: Calcolo del valore di

una variabile

Scrittura di una osservazione

(record) nel dataset

Reinizializzazione del contenuto

del buffer a dato mancante

No

Page 12: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’ACQUISIZIONE DEI DATI

Il SAS e un pacchetto in grado di fare numerose e notevoli elaborazioni statistiche, ha grandi

capacita di calcolo ed e in grado di gestire facilmente enormi quantita di dati. Condizione

imprescindibile perche queste operazioni abbiano effetto e quello di usare file che siano in

formato .sas7bdat, il formato interno di SAS.

Il nostro primo problema, quindi, e quello di acquisire i dati e di trasformarli nel formato

riconoscibile dal programma. Dato che generalmente si utilizzano file ASCII (.txt e .dat)

e file provenienti da database facilmente convertibili in .dbf o .xls, ci occuperemo di questi

casi.

2.1 L’ambiente di lavoro

L’ambiente di lavoro predefinito da SAS e una directory temporanea di nome WORK. Tutto

cio che viene memorizzato in questa directory viene cancellato al termine di ogni sessione di

lavoro. E possibile, pero, indicare a SAS di cambiare la directory di lavoro e di utilizzare

una directory personale: tutto cio che verra memorizzato in quest’ultima non andra perduto

dopo la chiusura della sessione e potra essere utilizzato in sessioni di lavoro successive.

Oltre a WORK, esiste una directory di lavoro permanente predefinita per SAS che si

chiama My SAS Files e nel contesto del nostro laboratorio si trova in c:\utenti; a tale

directory ci si riferisce con il nome SASUSER. La si trova elencata tra le directory accessbili

tramite la finestra EXPLORER. Per usare i file memorizzati qui vanno seguite le regole del

nome a due livelli descritte nel seguito.

Per utilizzare directory di lavoro diverse da WORK e SASUSER e necessario creare una

corrispondenza tra la directory che vogliamo usare e un nome logico. Si puo scegliere tra due

strade: utilizzare il comando globale oppure operare da menu. Il comando SAS da scrivere

nell’EDITOR per questa operazione e LIBNAME e la sintassi e:

LIBNAME nomelogico ’x:\nomecompletodirectory’;

L’alternativa e scegliere l’icona Nuova Libreria dalla barra degli strumenti e completare la

finestra con quello che sara il nome logico della directory ed il percorso alla stessa.

Come gia detto LIBNAME e un comando globale quindi puo essere usato al di fuori di

qualsiasi STEP e basta mandarlo in esecuzione solo una volta all’inizio della sessione di lavoro.

I nomi logici seguono le stesse regole di sintassi dei nomi delle variabili. Il nome logico

indichera la directory fino all’interruzione della sessione di lavoro corrente e dovra essere

ricreato per ciascuna sessione di lavoro successiva. E possibile creare molti collegamenti con

directory diverse in un’unica sessione di lavoro.

Tutti i dataset utilizzati possono avere nomi a uno o due livelli. Si dice nome a due

livelli quello premesso dal nome logico e da un punto (nomelogico.nomefile); tale file sara

memorizzato permanentemente nella directory di lavoro indicata dal nome logico. Si dice,

invece, nome ad un livello quello “semplice”; in questo caso il file sara memorizzato in WORK

e cancellato alla chiusura della sessione.

Page 13: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 9

2.2 L’acquisizione di dati ASCII

Molti file di dati sono in formato ASCII; le informazioni si presentano semplicemente in righe

e colonne di numeri e caratteri e sono visibili con qualsiasi editor di testo.

Possiamo dividere tali tipi di file principalmente in due categorie: quelli con i dati in

formato libero e quelli con i dati in formato colonna. Nei primi le informazioni si succedono

l’una dopo l’altra separate da qualche carattere di delimitazione quali lo spazio, il punto e

virgola, etc. Nei secondi, invece, le informazioni possono essere anche tutte di seguito ma

hanno una struttura ben precisa e, grazie al tracciato record, siamo in grado di distinguere

le informazioni sulla base della colonna che essi occupano.

I comandi SAS per l’acquisizione di file ASCII sono INFILE ed INPUT; vediamo prima la

sintassi essenziale e poi esamineremo qualche esempio.

LIBNAME nomelogico ’x:\nomedirectory’;

DATA nomelogico.nomefilesas;

INFILE ’y:\percorsocompleto\nomefile.txt’;

INPUT v1 v2 ... ;

RUN;

- LIBNAME crea il collegamento tra una directory sul disco X: e un nome logico.

- DATA inizia il Data Step e il nome scritto di seguito (nome a due livelli) indica quale sara

il nome del file di formato .sas7bdat che verra creato e che conterra le informazioni

acquisite dal file ASCII.

- INFILE specifica qual e il nome del file esterno da acquisire.

- INPUT descrive la struttura del file. Se si usa il formato libero occorre scrivere l’elenco

dei nomi delle variabili, nella sequenza in cui sono presenti sul file da acquisire; se si

usa il formato colonna occorre aggiungere l’indicazione del numero della colonna (o

delle colonne) su cui l’informazione si trova. In entrambi i casi le variabili verranno

acquisite come numeriche, se invece sono alfa-numeriche bisogna specificarlo utilizzando

il simbolo $ subito dopo il nome delle variabili corrispondenti.

- RUN conclude il passo di DATA.

Vedremo adesso un esempio di acquisizione di file in formato libero, uno di acquisizione di

file in formato colonna e infine un esempio piu complesso, in cui useremo il formato misto

e le principali opzioni utilizzabili. Tutti gli esempi fanno riferimento alla situazione del

laboratorio, per cui i dati iniziali sono memorizzati sul disco condiviso i:\labsas e vengono

salvati permanentemente nella directory c:\utenti\lab.Esempio 2.1: Acquisizione di dati in formato libero.

Il file che dobbiamo acquisire ha il seguente aspetto:

Finestra dell’editor di testo

Alfredo M 14 8 6

Alice F 13 7 7

Barbara F 13 5 6

Betty F 14 6 5

(...)

Page 14: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 10

Le informazioni, che sono su righe di lunghezza diversa, sono scritte una di seguito all’altra

separate da spazi e non ci sono dati mancanti. Il codice da scrivere nella finestra di EDITOR

e il seguente.

Finestra di Program Editor

DATA classe;

INFILE ’i:\labsas\piano1.txt’;

INPUT nome $ sesso $ eta teoria piano;

RUN;

La prima riga di comando DATA classe; inizia il passo di DATA e crea il dataset di nome

classe in formato SAS. Il dataset classe e di tipo temporaneo, questo significa che una

volta chiusa la sessione di lavoro non sara piu possibile accedere al contenuto del dataset

classe in una sessione di lavoro successiva.

Con l’istruzione INPUT descriviamo la struttura del file: nominiamo le variabili e indi-

chiamo qual e il loro tipo. Nel dataset classe troviamo cinque variabili: nome e sesso di

tipo carattere, come indicato dal simbolo $, ed eta, teoria e piano di tipo numerico (il tipo

di default, nel caso non sia specificato diversamente). Questo tipo di INPUT e detto INPUT a

formato libero.

Ci deve essere una corrispondenza biunivoca tra i nomi delle variabili elencati dopo INPUT

e i valori delle variabili che si susseguono nel file da acquisire. Se, per esempio, ci fosse stata

un’ulteriore colonna di dati, il SAS si sarebbe comunque limitato a leggere le prime cinque,

non “sapendo” di doversene aspettare delle altre.

Il comando RUN; conclude il passo di DATA.

Esempio 2.2: Acquisizione di dati in formato colonna.

Nel secondo esempio osserviamo come e cambiata la sintassi del comando INPUT.

Come potete notare, dopo la dichiarazione di ciascuna variabile ci sono dei numeri. Questi

numeri indicano le colonne del testo su cui si trovano le variabili stesse, infatti il tipo di INPUT

si chiama a colonna o a formato fisso.

Se una variabile occupa un sola colonna (come sesso), si indichera il numero di quella

colonna; se, invece, la variabile occupa piu colonne, bisogna indicarne la prima e l’ultima

collegate tra loro da un trattino (-). Il simbolo per specificare che si tratta di una variabile

di tipo carattere va inserito tra il nome della variabile e il numero della colonna ed e corretto

sia lasciarlo attaccato al nome o al numero o separato da entrambi con uno spazio. Il file

che stiamo per acquisire ha il seguente aspetto:

Finestra dell’editor di testo

Alfredo M 14 8 6

Alice F 13 7 7

Barbara F 13 5 6

Betty F 14 6 5

Paola F 15 6 7

Francesco M 13 6 6

(...)

Page 15: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 11

Il programma per acquisirlo e il seguente:

Finestra di Program Editor

LIBNAME lib ’c:\utenti\lab’;

DATA lib.classe;/* input a formato colonne */

INFILE ’i:\labsas\piano2.txt’;

INPUT nome $1-9 sesso $ 11 eta 14-15 teoria 18 piano 21;

RUN;

Il nome indicato dopo DATA e un nome a due livelli, quindi in questo caso il file creato sara

memorizzato nella directory a cui e associato il nome logico lib e sara sostanzialmente e

fisicamente diverso dal file classe creato con il passo di DATA precedente. Per esempio,

avendo specificato tramite il numero di colonne la lunghezza massima, Francesco risultera

completo, al contrario di prima, in cui era troncato perche la lunghezza predefinita del

contenuto di una variabile per SAS e di 8 caratteri.

Esempio 2.3: Acquisizione di dati in formato misto.

In questo esempio vedremo riassunte le opzioni piu usate nella fase di acquisizione di file

ASCII. Il file che vogliamo acquisire ha una forma particolare: la maggior parte delle infor-

mazioni si trova su colonne contigue e possiamo distinguere i valori gli uni dagli altri ed il

loro significato solo grazie al tracciato record. Nell’ultima parte del record, invece i dati sono

separati da spazi. Qui nella finestra di EDITOR abbiamo aggiunto degli a capo per poter

mostrare due record interi, ma gli a capo effettivi nel file sono evidenziati dal simbolo #.

Finestra dell’editor di testo

Dati di esempio per l’acquisizione con formato misto

001F046224072855302540124231121100272931225101992321

1313321243600143112111122132323332222223111050601033

013333331333333103448350906073 Elisa 10 6 5 8 #

002M051224042411322520223241315230313900335212222233

1412121227300133333119991131222221122229123020305090

011333330333333226746000508096 Marco 10 7 6 7 #

(...)

Supponiamo che a noi interessi acquisire un sottoinsieme delle variabili e precisamente:

- il codice personale (col. 1-3);

- il sesso (col. 4);

- l’anno di nascita (col. 6-7);

- il titolo di studio (col. 25);

- lo stato civile (col. 9);

- il nome (da col. 136);

Page 16: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 12

- i voti ottenuti in una certa prova, che sono le ultime quattro colonne del record, ma

su colonne diverse, seppure sempre nello stesso ordine.

Il programma necessario e il seguente.

Finestra di Program Editor

DATA ditutto;

INFILE ’i:\labsas\ditutto.txt’ FIRSTOBS=3;

INPUT codice 1-3 sesso$ 4 annon 6-7 titolo 25 statoc 9

@136 nome$ :10. v1-v4;

LABEL codice=’Codice identificativo’

annon=’Anno di nascita’

titolo=’Titolo di studio’

statoc=’Stato civile’

nome=’Nome dello studente’

v1=’Primo voto’

v2=’secondo voto’

v3=’Terzo voto’

v4=’Quarto voto’;

RUN;

I dati sono preceduti da un titolo e la prima unita statistica si trova sulla terza riga; con l’op-

zione FIRSTOBS=3 abbiamo specificato di saltare le prime due righe e di iniziare l’acquisizione

dalla terza.

Per la prima parte dei dati abbiamo dovuto scegliere l’INPUT a formato colonna, dopo il

nome della variabile abbiamo scritto su quale colonna (o quali colonne) si trova l’informa-

zione; se e un’informazione di tipo alfanumerico va aggiunto il $ tra il nome della variabile

e il numero della colonna.

Come potete notare e stato molto semplice selezionare ed acquisire solo i campi di

interesse e nell’ordine desiderato.

L’ @ e un puntatore di colonna: con tale operatore abbiamo posizionato il puntatore alla

colonna 136 e da questo punto in poi abbiamo utilizzato l’INPUT a formato libero, abbiamo

cioe specificato solo la lista dei nomi delle variabili (vedremo in seguito che il simbolo @ ha

un significato diverso se posto alla fine del comando). Dopo nome trovate :10. che e un

modificatore di formato usato per acquisire variabili i cui valori superano gli 8 caratteri di

default. In questo caso abbiamo “allargato” il campo a 10 caratteri. Inoltre, per le ultime

quattro variabili possiamo utilizzare una scrittura piu compatta per descriverle. Tramite il

carattere “-” indichiamo un range e nel file ditutto troveremo le variabili v1, v2, v3 e v4.

Infine troviamo l’istruzione LABEL. Per comodita, spesso i nomi delle variabili sono (fin

troppo) sintetici; con LABEL possiamo darne una descrizione molto piu dettagliata e com-

prensibile. Associamo a ciascun nome di variabile un’etichetta, questa va compresa tra apici

e non puo superare i 200 caratteri; notate che con un’unica istruzione LABEL si possono creare

piu etichette, separate da spazi, e compare un solo punto e virgola alla fine dell’istruzione.

Possiamo raggruppare le regole piu importanti in poche proposizioni.

COSE DA RICORDARE QUANDO SI USA

IL FORMATO LIBERO

- Ogni campo del record deve essere specificato in ordine

Page 17: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 13

- I campi devono essere separati da almeno uno spazio

- I valori mancanti devono essere rappresentati da un simbolo (in genere il punto .)

- Le variabili alfanumeriche non possono contenere spazi al loro interno

- La lunghezza della variabili alfanumeriche e di 8 caratteri (i caratteri in piu vengono

ignorati a meno che non si usino i modificatori di formato o le istruzioni INFORMAT o

LENGTH)

COSE DA RICORDARE QUANDO SI USA

IL FORMATO COLONNA

- Le variabili alfanumeriche possono contenere spazi

- I campi possono essere letti in qualsivoglia ordine

- Non e necessario usare un simbolo per i dati mancanti

- Si possono leggere sottoinsiemi di variabili (non e necessario leggere tutti i campi

presenti nel record)

- Alcuni campi o parte di essi possono essere riletti

Naturalmente l’argomento e lungi dall’essere esaurito. Per forza di cose (e di spazio) riman-

gono ancora nell’ombra molti aspetti, di alcuni dei quali pero diamo qualche appunto.

• I dati da acquisire possono trovarsi all’interno del passo di DATA stesso ed essere ac-

quisisti tramite l’istruzione CARDS;. Questa deve seguire l’istruzione INPUT in cui si

descrive la struttura dei dati e precedere i dati stessi. Alla fine dei dati veri e propri si

deve porre un altro punto e virgola (;).

• Normalmente, una volta acquisite le informazioni di un’unita, SAS va a cercare quelle

successive sulla riga seguente ma puo capitare che i dati riferiti a diverse unita stati-

stiche si susseguono sulla stessa riga; e possibile dare l’istruzione di “cercare” i dati

sulla stessa riga prima di passare a quella successiva con un @@ nell’istruzione INPUT,

dopo l’elenco delle variabili e prima del punto e virgola.

• In alcuni casi i dati riferiti alla stessa unita sono su righe diverse; esiste un puntatore

di riga, che e #numerodiriga.

• La singola @ posta alla fine del comando di INPUT consente di mantenere in sospeso

nel buffer di input il record in lettura in modo che esso possa essere riletto con un

successivo comando di INPUT.

• Quando il record risulta piu corto di quanto dichiarato, SAS va a cercare i dati mancan-

ti sulla riga successiva; si puo ovviare a questo problema inserendo l’opzione TRUNCOVER

nell’istruzione di INFILE.

• Analogamente, utilizzando l’INPUT a formato libero, puo capitare che ci siano meno

termini di quelli dichiarati; per impedire che SAS li cerchi nella riga successiva ma li

sostituisca con dati mancanti si puo usare l’opzione MISSOVER.

Page 18: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 14

• Nei file in formato libero il carattere che delimita i campi puo essere un carattere

diverso dallo spazio; per indicare al SAS quale carattere e il delimitatore dei campi si

usa l’opzione DELIMITER= indicando di seguito il carattere tra apici.

• Il comportamento di default prevede che non sia importante il numero di delimi-

tatori tra un campo e l’altro, ma se due delimitatori consecutivi individuano un

dato mancante e necessario usare l’opzione DSD perche i dati vengano interpretati

correttamente

Se nonostante tutto avete difficolta ad acquisire i vostri dati fate attenzione alla finestra di

LOG, da cui quasi sempre e possibile ricavare le informazioni necessarie per correggere il

vostro programma di acquisizione.

Gli errori piu comuni riguardano:

• la posizione della nostra directory di lavoro e del file da acquisire: se non scriviamo

correttamente i nomi sara come chiedergli di trovare oggetti che non esistono;

• la natura dei dati: se non diamo indicazioni SAS si aspettera variabili numeriche e se

invece trovera caratteri non sapra come comportarsi

• in versioni precedenti per default SAS si aspettava righe di 256 caratteri: se i nostri

dati erano memorizzati in righe piu lunghe era necessario indicarlo con l’opzione dell’i-

struzione INFILE LRECL=numeromassimodicaratteri; questa opzione non sembra piu

necessaria ma la segnaliamo in modo da poter interpretare correttamente esempi in cui

si trova ancora

• a volte sembra che i campi siano delimitati da spazi ma il solito programma (corretto)

non funziona: controllate se anziche spazi i campi non siano delimitati da tabulazioni

(si puo vedere ad esempio con Word e scegliendo di visualizzare i caratteri nascosti);

in tal caso la soluzione consiste o nel sostituire le tabulazioni con spazi o nell’usare

l’opzione DELIMITER=’09’x

• controllate sempre se ci sono tutti i punti e virgola necessari (e nessuno di piu!)

• se usate l’istruzione LABEL controllate gli apici, perche se ve ne dimenticate anche uno

soltanto, SAS non sara piu capace di distinguere fin dove e l’etichetta della variabile

e dove ricominciano i comandi. In questo caso e meglio salvare, chiudere e poi riaprire

e controllare accuratamente il programma prima di lanciarlo nuovamente.

2.3 L’acquisizione automatica dei file

Prima di utilizzare il codice descritto nei paragrafi precedenti puo essere utile fare un tenta-

tivo con alcuni strumenti messi a disposizione da SAS. Se i dati da importare sono origina-

riamente in un formato dati standard che SAS System e in grado di riconoscere (come file

con delimitatori, file Microsoft Excel o file dBASE) allora e possibile procedere con l’acquisi-

zione automatica tramite l’IMPORT WIZARD. Dal menu FILE si seleziona la voce Importa

dati: si avviera una procedura interattiva che attraverso finestre successive chiede all’utente

di inserire le informazioni necessarie, che sono:

• prima finestra

- formato del file da importare

Page 19: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

2. L’Acquisizione dei dati 15

• seconda finestra

- localizzazione del file da importare

- eventuali opzioni per l’importazione (ossia la specifica del delmitatore, il numero

della riga in cui si trova la prima osservazione e se i nomi delle variabili vadano

ottenuti dalla prima riga)

• terza finestra

- scelta della directory di destinazione, identificata dal solito nome logico che dovete

aver gia associato

- scelta del nome del file di destinazione

Allo stesso modo possiamo esportare i dati dal formato .sas7bdat in formati diversi (.xls,

.dbf, etc).

Purtroppo la procedura automatica non funziona sempre correttamente quindi riteniamo

utile conoscere alcune alternative. Per quanto riguarda i file di testo, abbiamo descritto i

comandi nei paragrafi precedenti, vediamo invece che cosa fare con file binari.

Un file .xls e sempre trasformabile in .dbf. Da EXCEL salviamo in dati in formato .dbf

scegliendo dal menu FILE, Salva con nome... e scegliendo il Tipo formato DB3 oppure

DB4.

Salvato e chiuso il file ritorniamo all’EDITOR di SAS.

Il programma e semplicissimo.

Finestra di Program Editor

LIBNAME lib ‘x:\nomedirectory’;

FILENAME prova ‘y:\nomedirectory\nomefile.dbf’;

PROC DBF DB3=prova OUT=lib.nomefile;

RUN;

FILENAME e l’analogo di LIBNAME, ma per i file. Abbiamo quindi associato al file fisico

esterno un nome logico (prova). Nella procedura DBF basta dare due opzioni: con DB3=

indichiamo qual e il file in formato .dbf (a cui abbiamo associato il nome logico prova);

con OUT= indichiamo dove e con quale nome vogliamo creare il file .sas7bdat risultato

dell’acquisizione.

La procedura vale sia con DB3 che con DB4. Basta ricordarsi di usare l’opzione giusta nel

programma SAS (rispettivamente DB3= e DB4=).

Le condizioni perche la procedura abbia successo sono:

• i dati devono essere in forma di matrice con unita sulle righe e variabili sulle colonne.

• sulla prima riga devono esserci i nomi della variabili secondo le regole di sintassi dei

nomi di SAS

• e bene che non ci siano dati mancanti nella prima riga di dati; se ci fossero, sostituiteli

con un valore del formato di quella variabile (a cui naturalmente darete significato di

dato mancante).

Se nonostante tutto questo la procedura continuasse a non funzionare controllate che il

file.dbf di partenza sia chiuso e che i formati delle variabili in EXCEL siano conformi al loro

contenuto.

Page 20: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. PROCEDURE UTILI

In questo capitolo esamineremo alcune procedure che, pur non compiendo elaborazioni sta-

tistiche, risultano molto utili per visualizzare il contenuto dei nostri dataset e verificare

velocemente il risultato delle operazioni che stiamo compiendo.

3.1 Alcuni concetti generali

Il SAS ha al proprio interno una libreria di procedure preprogrammate. Le procedure

SAS utilizzano i valori di dataset in formato .sas7bdat per produrre i risultati richiesti.

Ciascuna ha la propria struttura predefinita e sebbene possiamo personalizzare il risulta-

to sfruttando le (talvolta) numerose opzioni previste, non possiamo pero discostarcene e

introdurre varianti personali.

Le procedure sono state scritte e sviluppate in tempi diversi da autori diversi. Hanno

tutte una struttura simile ma ciascuna riflette in parte piu o meno evidente le caratteristiche

del proprio programmatore. Una volta individuata la procedura che fa al caso nostro non

possiamo esimerci dal controllarne la sintassi sul help in linea o nel manuale per essere sicuri

di compiere operazioni lecite e valide nel modo previsto e comprensibile per SAS.

In ogni caso tutte le procedure:

- cominciano con la parola PROC

- hanno un proprio nome riservato

- sono composte da una parte essenziale, senza la quale non agiscono, e una parte

opzionale per richiedere specifici risultati

- agiscono sul dataset indicato dopo il nome della procedura nell’opzione DATA= e se

questa viene omessa viene considerato l’ultimo dataset creato, che viene detto il dataset

“attivo”; ci si puo riferire al file sia tramite il suo nome a due livelli che attraverso il

suo nome completo (dalla radice in poi) inserendolo tra apici

- terminano con l’istruzione RUN; oppure quando incontrano l’inizio di un altro PROC

STEP o di un DATA STEP (Alcune procedure sono di tipo iterativo e quindi concludono

la loro esecuzione con RUN; ma rimangono in attesa di nuovo codice, la fine di queste

procedure viene data dal comando QUIT;, esempi di queste procedure sono la PROC

REG e la PROC GPLOT)

3.2 PROC SORT

La procedura SORT ordina le osservazioni di un dataset secondo una o piu variabili, me-

morizzando il risultato dell’ordinamento in un nuovo dataset o rimpiazzando il dataset

originale.

Page 21: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. Procedure utili 17

Finestra di Program Editor

PROC SORT DATA=ditutto OUT=ordinato;

BY sesso; RUN;

Con questo breve programma ordiniamo le osservazioni del dataset ditutto secondo la

variabile sesso e memorizziamo il risultato dell’ordinamento in un file di nome ordinato;

se avessimo scritto lo stesso nome di dataset sia dopo DATA= che dopo OUT= il file ordinato

avrebbe rimpiazzato il file originario.

Se la variabile secondo la quale si ordina e di tipo numerico, l’ordinamento sara crescente,

se la variabile e di tipo carattere, l’ordine sara quello alfabetico. E possibile scegliere l’ordine

inverso tramite l’opzione DESCENDING da inserire tra BY e il nomedellavariabile. E possibile

ordinare le osservazioni secondo piu variabili nidificate elencandole una di seguito all’altra

dopo l’istruzione BY; se si desidera l’ordinamento inverso rispetto a quello di default va

ricordata l’opzione DESCENDING prima della variabile corrispondente.

3.3 PROC PRINT

La procedura PRINT stampa le osservazioni di tutte le variabili di un dataset o di un loro

sottoinsieme nella finestra di OUTPUT. Puo anche calcolare e stampare totali e subtotali

delle varibili numeriche.

Vediamone un esempio. Immaginiamo di voler stampare una parte del dataset acquisito

nel capitolo precedente.

Finestra di Program Editor

PROC PRINT DATA=ditutto NOOBS;

VAR codice nome v1-v4;

SUM v1-v4;

BY sesso;

RUN;

La parte essenziale della procedura consiste nei soli PROC PRINT e RUN: se avessimo dato solo

queste istruzioni avremmo ottenuto la stampa di tutto il contenuto del dataset.

Vediamo, invece, qualche istruzione opzionale.

- DATA= indica di quale dataset vogliamo la stampa

- NOOBS e un’opzione che omette la stampa del numero dell’osservazione

- VAR e l’istruzione tramite la quale selezioniamo il sottoinsieme delle variabili che vo-

gliamo stampare (in questo caso solo codice, nome e le variabili da v1 a v4)

- SUM calcola i totali ed i subtotali delle variabili numeriche

- BY stampa le osservazioni separate per ciascun livello della variabile indicata dopo

questa istruzione. Perche questa istruzione venga eseguita correttamente occorre che

le osservazioni siano ordinate secondo tale variabile tramite la procedura PROC SORT,

che abbiamo presentato nel paragrafo precedente

Il risultato della procedura e il seguente:

Page 22: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. Procedure utili 18

Finestra di Output

---------------------------- SESSO=F ----------------------------------

CODICE NOME V1 V2 V3 V4

1 Elisa 10 6 5 8

5 Marcella 10 7 7 9

7 Maria 9 6 8 7

10 Alice 10 6 7 7

-- -- -- --

SESSO 39 25 27 31

---------------------------- SESSO=M ----------------------------------

CODICE NOME V1 V2 V3 V4

2 Marco 10 7 6 7

3 Matteo 10 6 6 8

4 Luca 9 5 7 6

6 Roberto 10 7 6 6

8 Alfredo 10 8 6 8

9 Giovanni 10 7 8 8

-- -- -- --

SESSO 59 40 39 43

== == == ==

98 65 66 74

3.4 PROC FSVIEW

La procedura FSVIEW apre una nuova finestra all’interno della quale viene visualizzato il

contenuto del dataset indicato.

Al contrario della PROC PRINT, che stampa nella finestra di OUTPUT ed e quindi con-

dizionata dalle dimensioni di quest’ultima, la PROC FSVIEW visualizza il dataset in forma di

matrice con le unita statistiche sulle righe e le varibili sulle colonne indipendentemente dalle

dimensioni del dataset stesso; ci si puo spostare su qualsiasi punto della matrice con le barre

di scorrimento.

Bisogna poi chiudere la nuova finestra, che altrimenti rimane attiva, se vogliamo procedere

con le elaborazioni.

Per default la PROC FSVIEW visualizza tutto il dataset ma possiamo utilizzare delle istru-

zioni opzionali, le piu importanti delle quali sono:

- VAR lista di variabili: con cui possiamo scegliere un sottoinsieme di variabili

- WHERE condizione: con cui possiamo richiedere la visualizzazione del sottoinsieme di

unita per cui si verifica la condizione specificata

Segue un esempio per visualizzare i valori delle variabili codice, nome, v1, v2, v3 e v4 per

le sole osservazioni donne; la matrice risultante in questo caso sara una 4*6.

Finestra di Program Editor

PROC FSVIEW DATA=ditutto;

VAR codice nome v1-v4;

WHERE sesso=’F’;

RUN;

Page 23: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. Procedure utili 19

3.5 PROC CONTENTS

La procedura CONTENTS stampa la descrizione del contenuto di uno o piu file SAS.

Finestra di Program Editor

PROC CONTENTS DATA=ditutto;

RUN;

In particolare, tramite le informazioni su:

- numero di osservazioni

- numero delle variabili

- nome, tipo, lunghezza ed eventuale etichetta delle variabili

possiamo controllare l’esattezza dell’acquisizione dei dati e l’ammissibilita delle operazioni

che intendiamo compiere, che dipendono dalla natura delle variabili.

Finestra di Output

La procedura CONTENTS

Nome data set WORK.DITUTTO Osservazioni 10

Tipo elemento DATA Variabili 10

Engine V9 Indici 0

Data creazione lunedı 21 luglio 2008 13:09:18 Lunghezza osservazione 88

Data ultima modifica lunedı 21 luglio 2008 13:09:18 Osservazioni eliminate 0

Protezione Compresso NO

Tipo data set Ordinato NO

Etichetta

Rappresentazione dei dati WINDOWS_32

Codifica wlatin1 Western (Windows)

Informazioni relative a engine/host

Dimensione pagina del data set 8192

Numero di pagine del data set 1

Prima pagina di dati 1

Max oss per pagina 92

Oss nella prima pagina di dati 10

Numero di riparazioni del data set 0

Nome file C:\Temp\_TD3640\ditutto.sas7bdat

Release di creazione 9.0101M3

Host di creazione XP_PRO

Elenco alfabetico di variabili e attributi

n. Variabile Tipo Lung Etichetta

3 annon Num 8 Anno di nascita

1 codice Num 8 Codice identificativo

6 nome Car 20 Nome dello studente

2 sesso Car 1

5 statoc Num 8 Stato civile

4 titolo Num 8 Titolo di studio

7 v1 Num 8 Primo voto

8 v2 Num 8 Secondo voto

9 v3 Num 8 Terzo voto

10 v4 Num 8 Quarto voto

Page 24: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. Procedure utili 20

3.6 PROC FORMAT

La PROC FORMAT offre un semplice metodo per creare propri formati di visualizzazione di

output e di input. Capita spesso che le variabili siano codificate con numeri anche se sono di

natura qualitativa; e utile per la lettura di qualsiasi risultato che questi vengano presentati

riportando, non tanto i valori della codifica, quanto il significato proprio della modalita. Con

la PROC FORMAT non interveniamo sui valori memorizzati (ad esempio i sessi codificati con i

valori 1 e 2) ma facciamo in modo che al momento della presentazione dei risultati i valori

vengano sostituiti con i relativi formati (che sono sostanzialmente etichette per le singole

modalita).

Prima si creano i vari formati poi si associano alle rispettive variabili. Nell’esempio

seguente ne vengono creati 3:

Finestra di Program Editor

LIBNAME nomelogico ’x:\nomedirectory’;

LIBNAME library ’x:\nomedirectory’;

PROC FORMAT LIBRARY=library;

VALUE a 1="etichetta11"

2="etichetta12"

3="etichetta13"

4="etichetta14";

VALUE b 1="etichetta21"

2="etichetta22"

3="etichetta23";

VALUE c 1="maschio"

2="femmina";

RUN;

Si noti che ci sono due istruzioni LIBNAME: la prima riguarda la solita associazione con

la directory dove memorizziamo permanentemente i dataset; la seconda e per memorizzare

permanentemente anche i formati che stiamo per dichiarare. La directory dei formati puo

essere la stessa dei dati o puo essere diversa. Si noti che per i formati e necessario usare il no-

me logico library; se si desidera usarne uno diverso allora bisognera aggiungere un’opzione

prima del codice in cui verra utilizzato: OPTIONS FMTSEARCH=(libref); dove con libref

si intende il nome scelto da noi.

Ogni istruzione VALUE permette di dichiarare un particolare formato che viene identifi-

cato dal nome che segue (in questo esempio: a, b e c) e al quale corrisponde l’insieme di

associazioni riportate prima del relativo punto e virgola.

In un successivo DATA STEP si potra associare alle variabili i rispettivi formati tramite

l’istruzione FORMAT (si noti il puntino dopo il nome del formato).

Finestra di Program Editor

DATA nomelogico.nomefile;

SET nomelogico.nomefile;

FORMAT v1 a. ;

FORMAT v2 b. ;

FORMAT v3 c. ;

RUN;

Page 25: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

3. Procedure utili 21

Se i formati sono stati memorizzati in un file permanente -formats.sas7cat- e se ne crea

l’associazione con le variabili come nell’esempio, allora non occorre dichiararli di nuovo in

sessioni di lavoro successive, ma basta che le varie procedure di analisi siano precedute dalla

doppia LIBNAME.

Se per qualche ragione, invece, non si vogliono memorizzare permanentemente i formati,

occorre eseguire la PROC FORMAT all’inizio della sessione di lavoro e solo da quel momento e

possibile utilizzare i vari formati, anche direttamente all’interno dei PROC STEP.

Finestra di Program Editor

PROC NOMEPROCEDURA DATA=nomelogico.nomefile;

FORMAT v1 a. ;

FORMAT v2 b. ;

ISTRUZIONE v1 v2;

RUN;

Si noti che se tante variabili hanno la stessa struttura, basta dichiararne il formato solo

una volta e poi associarlo a ciascuna variabile con istruzioni FORMAT distinte.

Page 26: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. MANIPOLAZIONE DI DATASET IN FORMATO .SAS7BDAT

Molto spesso le informazioni risultanti da una indagine non sono memorizzate in una forma

direttamente utilizzabile per svolgere le elaborazioni statistiche che abbiamo programmato.

Diviene necessario, ad esempio, predisporre dataset distinti (creazione di sottoinsiemi),

creare nuove variabili (trasformazioni, assegnazioni, riclassificazioni) sulla base di quelle ac-

quisite o riunire nello stesso dataset variabili che si riferiscono allo stesso fenomeno oggetto

di studio perche si rilevano nuove unita statistiche oppure si rilevano nuove variabili (unione

di dataset).

Puo inoltre essere necessario selezionare le unita statistiche sulla base del valore assunto

da alcune variabili (selezioni, condizioni).

Queste operazioni sono svolte all’interno di uno o piu passi di DATA.

4.1 Creazione di sottoinsiemi

Cominciamo introducendo i comandi che consentono di selezionare le variabili; supponiamo

di dover creare un dataset che contenga solo le variabili scelte da noi, oppure di voler “buttare

via” quelle che non ci servono. I comandi sono KEEP e DROP e possono essere usati sia come

comandi, in istruzioni vere e proprie, oppure come opzioni dell’istruzione DATA.

DATA sottoinsieme;

SET datsetcompleto;

KEEP listadivariabilidatenere;

/* oppure DROP listadivariabilidacancellare; */

RUN;

SET e il comando tramite il quale indichiamo quale dataset (gia in formato .sas7bdat!)

carichiamo e sul quale lavoreremo; con KEEP elenchiamo esplicitmente, separandole con spazi,

quali variabili devono essere riportate nel dataset finale mentre se usiamo DROP indicheremo

quelle che devono essere cancellate. Possiamo usare scritture compatte per definire alcuni

tipi di elenchi: il trattino singolo (-) individua range di variabili che condividono lo stesso

prefisso e hanno come suffisso un numero progressivo1, il doppio trattino (--) invece individua

variabili contigue come si presentano guardando la tabella completa oppure ricavabile dalla

struttura del dataset tramite la PROC CONTENTS2. Anche se dalla versione 8.2 di SAS KEEP

e DROP possono comparire entrambi nello stesso passo di DATA senza che venga segnalato

nessun errore, e buona norma utilizzarli in maniera alternativa, come e anche raccomandato

nell’help in linea. Nel prossimo esempio vedremo come questi due comandi possono essere

usati come opzioni del comando DATA.

Esempio 4.1: Uso di KEEP e DROP

Riprendiamo l’esempio 2.3 e supponiamo di voler creare due dataset, il primo contenente il

1v1-v4 significa v1 v2 v3 v4

2 nel nostro esempio potremmo sintetizzare codice--nome per indicare codice sesso annon titolo

statoc nome

Page 27: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 23

codice personale, il nome, il sesso, il titolo di studio e lo stato civile, mentre nel secondo

abbiamo bisogno del codice personale e dei voti ottenuti nelle quattro prove. A questo scopo

con lo stesso passo di DATA costruiamo due insiemi di dati che abbiamo chiamato dati1

e dati2, attraverso le opzioni KEEP indichiamo quali variabili andranno a formare i due

dataset.

Finestra di Program Editor

DATA dati1(KEEP=codice sesso annon titolo statoc nome)

dati2(KEEP=codice v1-v4);

INFILE ’i:\labsas\ditutto.txt’;

INPUT codice 1-3 sesso$ 4 annon 6-7 titolo 24 statoc 9

@136 nome$ :10. v1-v4;

RUN;

Lo stesso risultato si puo ottenere con la versione comando (ma in due distinti passi di

DATA. Avendo gia creato il dataset ditutto (come nell’esempio 2.3) tramite il comando SET

indichiamo a SAS di renderlo disponibile per elaborazioni che verranno memorizzate in

nuovi dataset di nome dati1 e dati2 e con il comando DROP togliamo le variabili che non

desideriamo riportare.

Finestra di Program Editor

DATA dati1;

SET ditutto;

DROP v1-v4;

RUN;

DATA dati2;

SET ditutto;

DROP nome sesso titolo statoc annon;

RUN;

Molto spesso e importante creare dei dataset piu piccoli in cui le unita statistiche siano

omogenee rispetto al valore di una o piu variabili. Per individuare e salvare (oppure can-

cellare) solo le unita statsitiche desiderate dobbiamo introdurre i costrutti di selezione ed i

comandi OUTPUT e DELETE.

DATA sottoinsiemeunita;

IF confrontologico THEN OUTPUT; /* osservazioni da tenere */

IF confrontologico THEN DELETE; /* osservazioni da cancellare */

RUN;

Quando il confrontologico e soddisfatto allora il buffer di input viene riportato nel

dataset finale, altrimenti il buffer viene scartato. In generale l’uso del comando OUTPUT in un

qualsiasi punto di un passo di DATA forza la scrittura del buffer mentre con la specificazione di

DELETE il buffer non viene riportato. Il comando IF confrontologico THEN OUTPUT; puo

essere sintetizzato dalla forma abbreviata IF confrontologico;. Esiste anche il comando

WHERE tramite il quale vengono selezionate solo le unita statistiche le cui variabili assumono

il valore specificato. Per svolgere selezioni piu complicate ricorreremo all’utilizzo di IF.

L’istruzione WHERE puo essere utilizzata anche nei PROC STEP perche la procedura richiesta

venga applicata solo alle osservazioni che presentano il valore specificato.

Page 28: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 24

DATA sottoinsiemeunita;

WHERE nomedivariabile=valore;

RUN;

4.2 Assegnazione e riclassificazione

Vediamo ora alcuni modi per definire, trasformare o riclassificare le variabili. La definizione

di una variabile puo avvenire per assegnazione diretta, ad esempio:

nomevariabile=valorenumerico;

nomevariabile=’stringa’;

nomevariabile=formulamatematica;

nomevariabile=altravariabileesistente;

Si noti che il tipo di variabile e definito direttamente dall’assegnazione, inoltre una variabi-

le puo essere definita come funzione di una o piu variabili. Useremo il termine assegnazione

per indicare una qualsiasi di queste forme.

Per riclassificare una variabile utilizzerermo uno dei due costrutti di selezione previsti da

SAS, i comandi IF-THEN-ELSE, la cui sintassi e la seguente (che puo limitarsi anche alla sola

prima parte).

IF confrontologico THEN assegnazione; ELSE assegnazione;

Gli operatori logici, gli operatori di confronto e le operazioni aritmetiche sono:

Operatori di confronto

maggiore >

maggiore o uguale >=

minore <

minore o uguale <=

uguale =

diverso ^=

Operatori logici

AND &

OR |NOT ^

Operazioni

somma +

sottrazione -

moltiplicazione *

divisione /

elevamento **

Sono infine disponibili molte funzioni matematiche come ad esempio le funzioni trigono-

metriche ed e da segnalare anche l’istruzione IN(valore1, valore2,...) quando vogliamo

controllare che il valore della nostra variabile sia compreso in un insieme (finito) di valori

predefiniti, racchiusi tra le parentesi.

Vediamo nel seguente esempio l’utilizzo dei comandi introdotti.

Esempio 4.2: Creazione e riclassificazione di variabili.

Supponiamo di avere a disposizione in un dataset in formato .sas7bdat di nome vecchio la

variabile eta che contiene le eta (in anni) e la variabile peso (in chilogrammi) che contiene

il peso delle unita statistiche. Si desidera:

1. costruire una nuova variabile che identifichi univocamente le unita statistiche

2. riclassificare la variabile eta in tre classi: da 0 a 18, da 19 a 60 e oltre 61 (sovrascrivendo

i valori originali)

3. riclassificare la variabile peso in due classi: da 0 a 70 e oltre 71 in un nuova variabile

chiamata pesod

4. ed infine calcolare il peso espresso in libbre nella variabile pesol

Page 29: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 25

e salvare il risultato in un dataset chiamato nuovo

Finestra di Program Editor

DATA nuovo;

SET vecchio;

/* costruzione della variabile codice */

RETAIN codice 0;

codice=codice+1;

/* riclassificazione dell’eta nella stessa varaibile */

IF eta < 19 & eta^=. THEN eta=1;

IF eta >=19 & eta < 61 THEN eta=2;

IF eta >= 61 THEN eta=3;

/* riclassificazione del peso in una nuova varaibile */

pesod=2;

IF peso=. THEN pesod=.;

IF peso <= 70 & peso^=. THEN pesod=1;

/* trasformazione del peso per averlo in libbre */

pesol=peso/2.2046;

RUN;

Dopo aver reso disponibile il dataset con il comando SET vecchio abbiamo creato una varia-

bile da usare come codice. Introduciamo il comando RETAIN che e forse uno dei comandi piu

difficili da capire. Vediamo come agisce. Abbiamo visto che nella fase di compilazione (vedi

il diagramma di flusso a pagina 7) SAS dopo aver controllato la sintassi dei comandi crea

un buffer di input. In questo spazio della memoria vi e un posto per ogni variabile che verra

creata nel passo di DATA. In fase di esecuzione viene letto il primo record dal file, i valori

delle variabili lette vengono temporaneamente scritti nel buffer di input. Alla fine del passo

di DATA il contenuto del buffer di input viene scritto definitivamente all’interno del dataset in

formato .sas7bdat e tutti i valori del buffer di input vengono reinizializzati a dato mancan-

te. In questo modo non e possibile mantenere il valore di una variabile tra la lettura di un

record ed il successivo. Con il comando RETAIN preveniamo la cancellazione del contenuto

del buffer di input per le variabili specificate in modo che il valore venga conservato e possa

essere usato all’interno di tutto il DATA STEP.

Nel nostro esempio con il comando RETAIN preveniamo la cancellazione della posizione nel

buffer di input della variabile codice che inizialmente assume il valore zero. Con il coman-

do di assegnazione codice=codice+1 otteniamo l’incremento del valore della variabile che

rimane, grazie all’uso di RETAIN, disponibile nella lettura del record successivo. Utilizziamo

il comando IF per riclassificare la variabile eta, si noti nel primo IF la scrittura esplicita di

non assimilare i valori mancanti ai valori piccoli della variabile eta. Questa cosa deve essere

sempre ricordata perche il valore mancante (.) nel confronto logico viene considerato come

il piu piccolo tra tutti i valori.

Un’altra struttura generale per operare selezioni e SELECT-WHEN-OTHERWISE-END:

SELECT;

WHEN (confrontologico_1) istruzioni_1;

WHEN (confrontologico_2) istruzioni_2;

OTHERWISE istruzione_3;

END;

Page 30: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 26

Ogni operazione di selezione e attuabile sia con il costrutto IF che con SELECT anche se

ci sono situazioni in cui uno dei due risulta essere piu “comodo”. Nella scelta vanno tenute

presenti le loro caratteristiche:

• ogni istruzione IF e un’istruzione a se

• in particolare, ciascuna ELSE si riferisce alla relativa IF

• le istruzioni vengono svolte nell’ordine in cui si presentano

• con l’istruzione SELECT si possono specificare quante condizioni si desidera, tramite

le relative istruzioni WHEN che vengono considerate nel loro complesso e devono essere

mutuamente esclusive

• l’OTHERWISE si riferisce all’insieme delle WHEN

• e occorre ricordarsi di concludere con END

Con entrambi i costrutti:

• si possono specificare condizioni articolate utilizzando le parentesi e gli operatori logici

• si possono scrivere delle condizioni nidificate

• se le istruzioni da svolgere sono piu d’una, vanno inserite tra le istruzioni DO; e END;

Esempio 4.3: Uso di RETAIN

Ritorniamo ora al comando RETAIN che adesso utilizzeremo in un contesto diverso. Suppo-

niamo di dover acquisire un insieme di dati che e composto di due tipi di record della forma

e di voler ricostruire le informazioni in modo da ottenere una matrice in cui le righe hanno

la stessa struttura e contengono variabili provenienti da entrambi i tipo di record:

Primo tipo:

tipo: col. 1, tipo di record

codice: col. 3-6, codice identificativo dell’unita statistica

nome: col. 8-18, nome dell’individuo

cognome: col. 20-30, cognome dell’individuo

eta: col. 32-33, eta

sesso: col. 35, sesso

Secondo tipo:

tipo: col. 1, tipo di record

codice: col. 3-6, codice identificativo dell’unita statistica

tempo: col. 8-10, durata della degenza (in giorni)

reparto: col. 12-21, reparto di ricovero

medico: col. 23-33, medico che ha seguito il paziente

Il file contenente i dati e nella forma:

Page 31: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 27

Finestra dell’editor di testo

1 0011 Antonio Zurlo 54 M

2 0011 12 chirurgia Roberti

2 0011 30 medicina Brotto

1 2045 Carla Fabi 27 F

2 2045 5 ortopedia Lucchi

1 0892 Paolo Giusti 5 M

2 0892 7 pediatria Semola

2 0892 10 chirurgia Roberti

2 0892 4 oculistica Pretto

Il dataset da costruire dovra contenere un record per ogni ricovero e riportare le seguenti

informazioni: codice, nome, cognome, eta, sesso, tempo, reparto, medico.

Per ottenere questo risultato dobbiamo lasciare in sospeso i valori delle variabili nel

buffer e dare due diversi comandi di input, condizionati al tipo di record; questa operazione

e possibile grazie alla singola chiocciola (@). Il record rimane nel buffer di input e puo essere

riletto con un altro comando di INPUT all’interno dello stesso passo di DATA. Quando siamo

in presenza di un record del primo tipo (tipo=1) acquisiamo il valore delle variabili: nome,

cognome, eta, sesso nel buffer di input e non riportiamo il record nel dataset. Grazie al

comando RETAIN i valori di queste variabili rimangono nel buffer di input e possono cosı essere

collegate alle informazioni della riga successiva. Il buffer viene scaricato solo al termine della

lettura di righe del secondo tipo. Vediamo per esteso il codice necessario:

Finestra di Program Editor

DATA ospedale;

INFILE ’i:\labsas\ospedale.txt’ TRUNCOVER;

INPUT tipo @;

SELECT;

WHEN (tipo=1)

DO;

INPUT codice 3-6 nome$ 8-18 cognome$ 20-30 eta 32-33 sesso$ 35;

RETAIN codice nome cognome eta sesso;

DELETE;

END;

WHEN (tipo=2)

DO;

INPUT tempo 8-10 reparto$ 12-21 medico$ 23-30;

DROP tipo;

OUTPUT;

END;

END;

RUN;

Si noti che quando ci sono piu istruzioni da eseguire esse devono essere raggruppate tra il

comando DO; ed il comando END;.

4.3 Unione di dataset

Puo succedere che le informazioni necessarie alle nostre analisi risiedano in file diversi che

vanno collegati correttamente. I comandi che servono per unire piu dataset sono:

Page 32: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

4. Manipolazione di dataset in formato .sas7bdat 28

SET listadeidataset;

MERGE listadeidataset;

Il comando SET ci permette di unire piu dataset aggiungendo al primo le osservazioni del

secondo e cosı via. E chiaro che perche l’unione avvenga correttamente e necessario che i

nomi delle variabili che contengono la stessa informazione siano uguali nei due dataset. Le

variabili che compaiono in un solo dataset saranno riportate per le unita statistiche degli

altri dataset come valori mancanti. Il comando MERGE consente invece di unire piu dataset

aggiungendo al primo dataset le variabili contenute negli altri, associando le unita statistiche

secondo una chiave (una variabile o piu).

Esempio 4.4: Uso di MERGE

Nel primo dataset dati1 abbiamo le seguenti variabili: impianto (nome dell’impianto),

inizio (data di entrata in funzione dell’impianto), respo (nome del responsabile), mentre

nel secondo di nome dati2 abbiamo: impianto (nome dell’impianto), anno (anno di produ-

zione), produzione (quantita prodotta), tempo (periodo di blocco della produzione nell’arco

dell’anno espresso in giorni). Mentre nel primo insieme di dati ad ogni impianto corrisponde

un impianto, nel secondo vi sono per ogni impianto un numero di record pari al numero di

anni in cui l’impianto e stato in funzione. Utilizziamo, quindi, la variabile impianto come

chiave per costruire un unico dataset nel seguente modo:

Finestra di Program Editor

PROC SORT DATA=dati1;

BY impianto; RUN;

PROC SORT DATA=dati2;

BY impianto; RUN;

DATA nuovo;

MERGE dati1 dati2;

BY impianto;

RUN;

Si noti che prima di utilizzare il comando MERGE e necessario ordinare i dataset secondo la

chiave che si vuole utilizzare.

Page 33: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. ESEMPI DI PROCEDURE STATISTICHE

In questo capitolo vedremo alcuni esempi di procedure statistiche; non discuteremo la parte

teorica, per la quale rimandiamo ai testi, ne pretendiamo di dare una spiegazione esaustiva

di tutte le potenzialita delle procedure, per le quali ci sono i manuali. L’intento di questo

quaderno e quello di indicare agli utenti una possibile strada operativa per le loro esercitazioni

e tesi una volta che hanno appreso la teoria, avviarli e metterli nelle condizioni di approfondire

i concetti sulla base delle specifiche esigenze.

PROC FREQ PROC ANOVA

PROC UNIVARIATE PROC CLUSTER

PROC CORR PROC FACTOR

PROC GPLOT PROC LOGISTIC

PROC REG PROC CORRESP

PROC TABULATE

5.1 PROC FREQ

La PROC FREQ ci consente di ottenere tabelle di frequenze (assolute, relative, cumulate, . . .)

a una o a piu entrate ed il calcolo di indici per valutare la presenza di forme di dipendenza.

La sintassi minima e:

PROC FREQ;

RUN;

Non specificando ulteriori comandi la procedura costruisce la tabella di frequenze semplici

per ciascuna variabile presente nel dataset attivo, indipendentemente dalla loro natura.

Esempio 5.1: Pane con fibre

A 48 pazienti sofferenti di problemi gastro-intestinali e stato fornito per i loro pasti un tipo

diverso di pane tra il pane comune, quello arricchito con crusca, quello arricchito con mais e

quello arricchito con entrambi. Dopo un mese di utilizzo ogni paziente ha dato un giudizio

complessivo sui problemi di digeribilita che ha riscontrato, classificandoli in: nessuno, pochi,

medi, molti.

Acquisiamo i dati in un file temporaneo di nome pane e indichiamo le variabili di interesse

con codtipo e prob; possiamo costruire le tabelle di frequenze semplici e una tabella a doppia

entrata nel seguente modo:

Finestra di Program Editor

PROC FREQ DATA=pane;

TABLES codtipo prob codtipo*prob / CHISQ;

RUN;

Page 34: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 30

- TABLES e il comando fondamentale della procedura FREQ. Nel nostro caso abbiamo

richiesto la creazione delle tabelle di frequenza semplici sia per la variabile codtipo

che per prob e di una tabella a doppia entrata.

E possibile specificare alla fine del comando alcune opzioni che riguardano il calcolo di indici

di dipendenza o la soppressione del calcolo di distribuzioni di frequenze.

- CHISQ e l’opzione per il calcolo di misure di associazione basate sul χ2

Tra le altre opzioni utilizzabili ricordiamo:

- AGREE per il calcolo di test e misure di concordanza

- MISSING include i valori mancanti, che altrimenti verrebbero eliminati, nel calcolo delle

percentuali e altre statistiche

- MEASURES per il calcolo di svariati test di associazione

- CL calcola gli intervalli di confidenza per i test calcolati da MEASURES

Il risultato del nostro programma e:

Finestra di Output

La procedura FREQ

Tipo di pane

Frequenza Percentuale

codtipo Frequenza Percentuale cumulata cumulata

--------------------------------------------------------------------------------

pane con crusca 12 25.00 12 25.00

pane con mais 12 25.00 24 50.00

pane con mais e crusca 12 25.00 36 75.00

pane comune 12 25.00 48 100.00

Test del chi quadrato

per proporzioni uguali

------------------------

Chi quadrato 0.0000

DF 3

Pr > ChiQuadr 1.0000

Problemi di digeribilita

Frequenza Percentuale

prob Frequenza Percentuale cumulata cumulata

-----------------------------------------------------------------

nessuno 17 35.42 17 35.42

pochi 15 31.25 32 66.67

medi 9 18.75 41 85.42

molti 7 14.58 48 100.00

Test del chi quadrato

per proporzioni uguali

------------------------

Chi quadrato 5.6667

DF 3

Pr > ChiQuadr 0.1290

Page 35: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 31

Tabella di codtipo per prob

codtipo(Tipo di pane) prob(Problemi di digeribilita)

Frequenza |

Percentuale |

Pct riga |

Pct col |nessuno |pochi |medi |molti | Totale

-----------------+--------+--------+--------+--------+

pane con crusca | 7 | 4 | 1 | 0 | 12

| 14.58 | 8.33 | 2.08 | 0.00 | 25.00

| 58.33 | 33.33 | 8.33 | 0.00 |

| 41.18 | 26.67 | 11.11 | 0.00 |

-----------------+--------+--------+--------+--------+

pane con mais | 2 | 2 | 3 | 5 | 12

| 4.17 | 4.17 | 6.25 | 10.42 | 25.00

| 16.67 | 16.67 | 25.00 | 41.67 |

| 11.76 | 13.33 | 33.33 | 71.43 |

-----------------+--------+--------+--------+--------+

pane con mais e | 2 | 5 | 3 | 2 | 12

crusca | 4.17 | 10.42 | 6.25 | 4.17 | 25.00

| 16.67 | 41.67 | 25.00 | 16.67 |

| 11.76 | 33.33 | 33.33 | 28.57 |

-----------------+--------+--------+--------+--------+

pane comune | 6 | 4 | 2 | 0 | 12

| 12.50 | 8.33 | 4.17 | 0.00 | 25.00

| 50.00 | 33.33 | 16.67 | 0.00 |

| 35.29 | 26.67 | 22.22 | 0.00 |

-----------------+--------+--------+--------+--------+

Totale 17 15 9 7 48

35.42 31.25 18.75 14.58 100.00

Statistiche per la tabella di codtipo per prob

Statistica DF Valore Prob

-------------------------------------------------------

Chi quadrato 9 16.9427 0.0496

Chi quadrato rapp verosim 9 18.8803 0.0262

Chi quadrato MH 1 0.0000 1.0000

Coefficiente Phi 0.5941

Coefficiente di contingenza 0.5108

V di Cramer 0.3430

ATTENZIONE: il 100% delle celle ha conteggi attesi minori

di 5. Il chi quadrato puo non essere un test valido.

Perogni cella della tabella a doppia entrata sono riportati nell’ordine: la frequenza asso-

luta, la frequenza relativa, la frequenza precentuale di riga (cioe la distribuzione condizionata

della variabile prob dato codtipo) e infine la frequenza percentuale di colonna (distribuzione

condizionata della variabile codtipo dato prob).

Considerando una significativita del 5% il valore del χ2 risulta significativo e quindi

sembra ci sia una certa dipendenza tra le due variabili ma SAS ci segnala che i valori

all’interno delle celle sono piuttosto esigui e quindi che la distribuzione del test potrebbe non

essere ben approssimata dalla distribuzione asintotica.

5.2 PROC UNIVARIATE

Lo scopo principale della PROC UNIVARIATE e quello di calcolare indici di sintesi di una

variabile statistica quantitativa. I risultati si presentano suddivisi in sei sezioni: gli indici

di sintesi basati sui momenti, misure e test di locazione, quantili, i valori estremi della

distribuzione e le osservazioni mancanti. Si noti che non sempre tutti gli indici e i test

Page 36: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 32

applicati sono interessanti per la nostra analisi o sono applicabili alla nostra variabile. E

compito nostro distinguere e ricavarne le informazioni di interesse. La sintassi minima e:

PROC UNIVARIATE;

RUN;

Non specificando ulteriori comandi la procedura calcola tutti gli indicatori per ciascuna

variabile che risulti di tipo numerico1 presente nel dataset attivo.

Vediamo ora un esempio.

Esempio 5.2: Spese per alcol e tabacco in Gran Bretagna (1◦ parte)

Nel file alcol.txt e stata registrata la spesa media settimanale (in sterline) in prodotti del

tabacco e bevande alcoliche per ciascuna delle 11 regioni britanniche.

Supponiamo di aver acquisito i dati e di averli memorizzati nel file temporaneo di nome

alcol e di aver chiamato le variabili di interesse alcohol e tobacco. Un primo interesse e

quello di calcolare indici di sintesi della distribuzione delle spese.

Finestra di Program Editor

PROC UNIVARIATE DATA=alcol;

VAR alcohol tobacco;

RUN;

Con il comando VAR specifichiamo per quali variabili deve essere eseguita l’analisi. Di

seguito riportiamo i risultati riguardanti alcohol.

Finestra di Output

La procedura UNIVARIATE

Variabile: Alcohol

Momenti

N 11 Somma dei pesi 11

Media 5.44363636 Somma delle osservazioni 59.88

Deviazione Std 0.79776278 Varianza 0.63642545

Skewness -0.4704039 Kurtosis -1.0164778

SS non corretta 332.3292 SS corretta 6.36425455

Coeff di var 14.6549609 Errore std media 0.24053453

Misure statistiche di base

Posizione Variabilita

Media 5.443636 Deviazione Std 0.79776

Mediana 5.630000 Varianza 0.63643

Moda . Intervallo 2.45000

Intervallo interquartile 1.34000

Test di locazione: Mu0=0

Test -Statistica- -----Valore p-----

T di Student t 22.63141 Pr > |t| <.0001

dei segni M 5.5 Pr >= |M| 0.0010

dei segni per ranghi S 33 Pr >= |S| 0.0010

1 comprese le variabili qualitative codificate con numeri

Page 37: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 33

Quantili (Definizione 5)

Quantile Stima

100% Max 6.47

99% 6.47

95% 6.47

90% 6.19

75% Q3 6.13

50% Mediana 5.63

25% Q1 4.79

10% 4.52

5% 4.02

1% 4.02

0% Min 4.02

La procedura UNIVARIATE

Variabile: Alcohol

Osservazioni estreme

---Inferiori--- ---Superiori---

Valore Oss Valore Oss

4.02 12 5.89 8

4.52 7 6.08 11

4.79 9 6.13 3

4.89 5 6.19 4

5.27 10 6.47 2

Valori mancanti

---Percentuale di---

Valore Tutte Oss

mancante Conteggio le oss mancanti

. 1 8.33 100.00

5.3 PROC REG, PROC GPLOT e PROC CORR

In questa sezione svolgeremo un breve esempio utilizzando il file acquisito precedentemente

per presentare tre procedure: PROC GPLOT, una delle procedure grafiche di SAS, PROC CORR,

per il calcolo di matrici di correlazione e PROC REG, la procedura deputata per svolgere la

stima dei parametri con il metodo dei minimi quadrati (ed e solo una delle tante procedure

di regressione utilizzabili in SAS) .

Esempio 5.3: Spesa per alcol e tabacco in Gran Bretagna (2◦ parte)

Abbiamo visto che l’insieme di dati che utilizziamo e composto di due variabili statistiche: la

spesa media settimanale per alcol e tabacco nelle 11 regioni britanniche, espressa in sterline.

Vogliamo verificare se esiste una relazione tra le due misure. Per prima cosa costruiamo

un grafico di dispersione che illustri l’andamento delle variabili. A tale scopo utilizziamo la

PROC GPLOT.

Finestra di Program Editor

PROC GPLOT DATA=alcol;

PLOT alcohol*tobacco / FRAME;

RUN;QUIT;

Page 38: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 34

Fig. 5.1: Grafico del spesa per prodotti del tabacco (in ascissa) e per bevande alcoliche (in ordinata)

Il comando principale della PROC GPLOT e PLOT assey*assex / opzioni; dove assey e il

nome della variabile da porre in ordinata mentre assex e invece l’ascissa. Dopo la barra (/)

possono essere indicate le opzioni che permettono di modificare le dimensioni degli assi, le

dimensioni dei caratteri e l’aspetto esteriore del grafico. Con FRAME indichiamo che il grafico

deve essere riquadrato. La procedura GPLOT, come altre procedure, continua l’esecuzione

fino all’incontro del comando conclusivo QUIT; Il grafico che otteniamo e riportato in figura

5.1.

Dal grafico si osserva che sembra esserci correlazione tra le due variabili e che un modello

di regressione lineare semplice potrebbe risultare soddisfacente. Calcoliamo la matrice di

correlazione:

Finestra di Program Editor

PROC CORR;

VAR alcohol tobacco;

RUN;

Finestra di Output

La procedura CORR

2 Variabili: Alcohol Tobacco

Statistiche semplici

Somma

Variabile N Media Dev std delle oss Minimo Massimo

Alcohol 11 5.44364 0.79776 59.88000 4.02000 6.47000

Tobacco 11 3.61818 0.59071 39.80000 2.71000 4.56000

Page 39: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 35

Coefficienti di correlazione di Pearson, N = 11

Prob > |r| rispetto a H0: Rho=0

Alcohol Tobacco

Alcohol 1.00000 0.22357

0.5087

Tobacco 0.22357 1.00000

0.5087

Il risultato della PROC CORR e composto da due parti: una brevissima analisi delle singole

variabili e la matrice di correlazione. Sotto il valore di ciascun coefficiente di correlazione e

riportata la significativita rispetto al test di uguaglianza a 0. In questo caso la correlazione

calcolata e piuttosto bassa e non significativa, nonostante il grafico ci faccia intuire una si-

tuazione diversa. Osservando meglio il grafico, pero, possiamo notare che sembra esserci un

outlier che ha un valore molto alto per la spesa in prodotti del tabacco ma decisamente basso

per la spesa di alcolici (in basso a destra nel grafico). Proviamo quindi ad eliminare l’osserva-

zione dall’analisi; per esempio possiamo utilizzare N , una variabile di sistema nascosta che

rappresenta la posizione di ciascuna osservazione nel dataset (in generale, possiamo utilizzare

qualsiasi variabile che identifichi univocamente l’unita).

Finestra di Program Editor

DATA alcolsenza;

SET alcol;

IF _N_=12 THEN DELETE;

RUN;

La relativa matrice di correlazione cambia in molto evidente:

Finestra di Output

Alcohol Tobacco

Alcohol 1.00000 0.78429

0.0072

Tobacco 0.78429 1.00000

0.0072

A questo punto calcoliamo il modello di regressione. :

Finestra di Program Editor

PROC REG DATA=alcolsenza;

MODEL alcohol = tobacco;

OUTPUT OUT=result PREDICTED=pred RESIDUAL=res;

RUN;QUIT;

Page 40: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 36

La sintassi minima per la PROC REG comprende solo l’istruzione MODEL, il resto e opzionale.

Nel comando MODEL viene specificato il modello di regressione, prima la variabile dipen-

dente, separata dalla lista di variabili esplicative tramite il segno di uguale. E possibile speci-

ficare delle opzioni utilizzando la barra (/). Nelle opzioni troviamo la possibilita ad esempio

di ottenere informazioni diagnostiche. Se si desidera stimare un modello polinomiale e ne-

cessario prima creare tramite un DATA STEP le variabili che rappresentano le potenze della

variabile esplicativa. Con il comando OUTPUT viene creato un dataset in formato .sas7bdat

con nome specificato in OUT= e contenente le variabili specificate di seguito. Nel nostro caso

abbiamo riportato i valori previsti (PREDICTED) con il nome pred e i residui della regressione

(RESIDUALS) con il nome res. Questo ci permette di utilizzare tali valori in ulteriori anali-

si. Si noti che la procedura si conclude con il comando QUIT;. Nella finestra di OUTPUT

otteniamo:

Finestra di Output

The REG Procedure

Model: MODEL1

Dependent Variable: Alcohol

Analysis of Variance

Sum of Mean Valore

Origine DF Squares Square F Pr > F

Model 1 2.54337 2.54337 12.78 0.0072

Error 8 1.59147 0.19893

Corrected Total 9 4.13484

Root MSE 0.44602 R-Square 0.6151

Dependent Mean 5.58600 Adj R-Sq 0.5670

Coeff Var 7.98461

Parameter Estimates

Parameter Standard

Variable DF Estimate Error Valore t Pr > |t|

Intercept 1 2.04122 1.00136 2.04 0.0759

Tobacco 1 1.00590 0.28132 3.58 0.0072

Nella prima parte viene riportata la scomposizione della varianza secondo il modello di

regressione stimato insieme ad alcune informazioni sulla variabile dipendente e al coefficiente

di determinazione R2. Nella seconda parte sono riportati le stime dei coefficienti insieme ad

una stima della variabilita e del t-test per la verifica dell’ipotesi nulla H0 : β = 0 contro

l’ipotesi alternativa H1 : β 6= 0 (dove con β intendiamo la stima del parametro stimato).

Nell’ultima colonna e riportato il valore p.

Da questi risultati accettiamo l’ipotesi alternativa per entrambi i coefficienti, il coefficiente

di determinazione e discreto e infatti il test F ci indica che il modello e da preferire rispetto

ad un modello che presenti la sola intercetta.

E bene osservare l’andamento dei valori previsti dal modello e dei residui:

Finestra di Program Editor

PROC GPLOT DATA=result;

AXIS1 VALUE = (F=SWISS H=0.7)

LABEL = (F=SWISS H=1 ’Prodotti del tabacco’)

Page 41: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 37

Fig. 5.2: Grafico della spesa per prodotti del tabacco (in ascissa), della spesa per bevande alcoliche

(simbolo: +) e dei valori previsti (simbolo: �).

ORDER = 3 TO 5 BY 1;

AXIS2 VALUE = (F=SWISS H=0.7)

LABEL = (F=SWISS H=1 ’Bevande alcoliche’);

PLOT alcohol*tobacco=1 pred*tobacco=’square’ / FRAME

OVERLAY

HAXIS=AXIS1

VAXIS=AXIS2;

RUN;QUIT;

PROC GPLOT DATA=result;

AXIS1 VALUE = (F=SWISS H=0.7)

LABEL = (F=SWISS H=1 ’Valori previsti’)

ORDER = 4 TO 7 BY 1;

AXIS2 VALUE = (F=SWISS H=0.7)

LABEL = (F=SWISS H=1 ’Residui’);

PLOT res*pred / FRAME

HAXIS=AXIS1

VAXIS=AXIS2;

RUN;QUIT;

AXESn (dove n e un numero) consente di definire l’aspetto esteriore di un asse, le componenti

piu importanti di questo comando sono: VALUE, LABEL e ORDER. Con VALUE indichiamo

quali sono le caratteristiche grafiche dei valori riportati sull’asse, in particolare F=SWISS

indica di utilizzare il set di caratteri SWISS e H=0.7 una dimensione del 70% rispetto alla

dimensione predefinita. Con LABEL possiamo indicare una etichetta per l’asse ed infine con

ORDER indichiamo il valore minimo e massimo e a quale intervallo vanno riportati i valori.

Per utilizzare uno stile AXESn esso deve essere indicato nelle opzioni del comando PLOT come

mostrato nell’esempio, HAXIS= per l’asse delle ascisse e VAXIS= per quello delle ordinate.

Per ottenere due grafici sovrapposti non e sufficiente specificarli nello stesso comando PLOT

ma e necessario nelle opzioni specificare OVERLAY. E possibile differenziare i simboli dei

due grafici con la sintassi assey*assex=’simbolo’, dove ’simbolo’ puo ssere un simbolo

definito (’star’, ’square’, · · ·) oppure un simbolo definito con il comando SYMBOLn che segue

una sintassi simile a quella di AXESn che noi non approfondiamo. Il simbolo definito con

SYMBOLn e utilizzato specificando il numero n: assey*assex=n.

I grafici sono riportati nelle figure 5.2 e 5.3.

Page 42: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 38

Fig. 5.3: Grafico dei valori previsti (in ascissa) e dei reisdui.

Dai grafici si nota che il modello puo essere considerato soddisfacente. Con una PROC

UNIVARIATE otteniamo ulteriori informazioni sulla qualita dei residui.

Finestra di Program Editor

PROC UNIVARIATE DATA=result;

VAR res;

RUN;

5.4 PROC TABULATE

La PROC TABULATE e una procedura che consente di costruire tabelle di frequenza e indici

statistici univariati, in particolare e utile per ottenere prospetti sintetici di indicatori uni-

variati secondo la classificazione di variabili qualitative. Le tabelle di default sono semplici

ma altamente personalizzabili. La PROC TABULATE calcola molte delle statistiche che so-

no calcolate da altre procedure di statistiche descrittive come PROC MEANS, FREQ e REPORT.

La procedura offre inoltre flessibilita nel classificare i valori delle variabili creando tra loro

relazioni gerarchiche e meccanismi per etichettare e visualizzare le variabili e le statistiche.

Esempio 5.4: esempio tabulate

In questo semplice esempio consideriamo i dati di dieta: su 28 persone sono state rilevate

le variabili sesso (sesso) e peso iniziale (peso1), sono state quindi suddivise in 4 gruppi

(distinti da 4 colori) per seguire un differente regime alimentare e successivamente ne e stato

misurato il peso finale (peso2).

Desideriamo qualche indicatore riassuntivo del peso dei soggetti classificati secondo sesso

e/o gruppo. Qui mostriamo solo qualche esempio delle possibilita ottenibili con questa

procedura; il codice e il seguente:

Page 43: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 39

Finestra di Program Editor

PROC TABULATE DATA=dieta;

CLASS sesso gruppo;

VAR peso1 peso2;

TABLE sesso ALL, gruppo ALL;

TABLE sesso, (peso1 peso2)*MEAN;

TABLE sesso, (peso1 peso2)*(MIN MAX);

TABLE gruppo sesso, peso1*(N MEAN);

TABLE sesso ALL, peso1*(N MEAN);

TABLE gruppo*sesso, peso2*(N MEAN);

RUN;

Con il comando CLASS si specifica quali sono le variabili di classificazione, solitamente qua-

litative; con il comando VAR si indicano quali sono le variabili quantitative su cui si desidera

calcolare gli indicatori; l’istruzione TABLE costruisce la tabella sulla base di quanto dichiarato

per le righe e le colonne e si possono richiedere quante tabelle si desidera. La pseudo variabile

ALL consente di ottenere le frequenze marginali o i totali marginali per qualunque statistica.

In generale si ricordi che prima della virgola va l’espressione che definira le righe ossia le

variabili di classificazione, mentre dopo la virgola va l’espressione che definira le colonne,

ossia le statistiche di interesse e su quali variabili vanno calcolate, collegate tra loro da un

asterisco; nel nostro esempio otterremo:

• TABLE sesso ALL, gruppo ALL: tabella di frequenze incrociate

• TABLE sesso, (peso1 peso2)*MEAN: media di ciascuna variabile, separatamente per

sesso

• TABLE sesso, (peso1 peso2)*(MIN MAX): statistiche di min e max separatamente

per sesso

• TABLE gruppo sesso, peso1*(N MEAN) numerosita e media separatamente per sesso

e per gruppo

• TABLE sesso ALL, peso1*(N MEAN): numerosita e media separatamente per sesso e

in totale

• TABLE gruppo*sesso, peso2*(N MEAN): numerosita e media separatamente per il

sesso incrociato con il gruppo

5.5 PROC ANOVA

La PROC ANOVA e una delle molte procedure utilizzabili in SAS per l’analisi della varianza; e

concepita per gli studi di piani bilanciati; in casi diversi e piu opportuno usare le specifiche

opzioni della PROC GLM. Tuttavia la PROC ANOVA puo tranquillamente essere utilizzata nei

disegni in cui tutti i fattori sono ortogonali tra loro (one-way anova, quadrati latini, etc).

Esempio 5.5: Composizione degli hotdog

Consideriamo i risultati di un laboratorio di analisi sulla composizione di tre diversi tipi di

hotdog in termini di calorie e quantita di sodio. I tipi di hotdog sono quelli di manzo, quelli

di pollo e quelli di carne mista (maiale, manzo e pollo). Dopo l’acquisizione procediamo con

l’anova; il codice e il seguente:

Page 44: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 40

Finestra di Program Editor

PROC ANOVA DATA=lib.hotdog;

CLASS tipo;

MODEL calorie sodio=tipo;

RUN;

Abbiamo indicato che il dataset attivo e hotdog quindi abbiamo dato le istruzioni fonda-

mentali:

- CLASS e l’istruzione che indica qual e la variabile di classificazione da considerare nel

modello, e un’istruzione necessaria e deve apparire prima dell’istruzione MODEL;

- MODEL indica quali sono le variabili dipendenti (quelle prima del segno di =) e gli effetti

indipendenti;

Nell’output prima troviamo un riassunto sui livelli di classificazione ed il numero di osserva-

zioni coinvolte quindi l’analisi della varianza vera e propria.

Finestra di Output

The ANOVA Procedure

Dependent Variable: calorie

Somma dei Media Valore

Origine DF quadrati quadratica F Pr > F

Model 2 17692.19510 8846.09755 16.07 <.0001

Error 51 28067.13824 550.33604

Corrected Total 53 45759.33333

R-Square Coeff Var Root MSE calorie Mean

0.386636 16.12935 23.45924 145.4444

Media Valore

Origine DF Anova SS quadratica F Pr > F

tipo 2 17692.19510 8846.09755 16.07 <.0001

L’F di Snedecor per le calorie vale 16.07 ed e altamente significativo, mentre quello per il sodio

vale 1.78 (risultato non riportato) che risulta non significativo. Dal boxplot (diagramma a

scatola e baffi) risulta evidente che l’apporto calorico degli hotdog di pollo e nettamente

inferiore a quello degli altri due tipi (figura 5.4). Il boxplot e stato ottenuto con il seguente

codice:

Finestra di Program Editor

PROC BOXPLOT DATA=lib.hotdog;

PLOT calorie*tipo;

RUN;

Page 45: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 41

Fig. 5.4: Boxplot delle calorie per tipologia di hotdog

5.6 PROC CLUSTER

La PROC CLUSTER divide le osservazioni di un dataset in gruppi gerarchici utilizzando uno

degli undici metodi previsti. I dati iniziali possono essere valori di variabili numeriche o

distanze. Se sono valori, la PROC CLUSTER calcola distanze euclidee.

La sintassi minima necessaria e la seguente:

PROC CLUSTER METHOD=nomemetodo DATA=nomefilesas7bdat;

RUN;

Nell’esempio che discuteremo sara proposta qualche istruzione opzionale.

Esempio 5.6: Consumo di proteine in Europa

Nel file proteine.txt sono memorizzati i dati riguardanti il consumo di proteine in 25 paesi

europei per 9 tipologie di cibo (i dati risalgono al 1973).

Acquisiamo i dati utilizzando l’INPUT a formato libero specificando dopo l’istruzione

INPUT l’elenco delle variabili. Il file ottenuto e pro.sas7bdat. La nostra intenzione e di capire

se e possibile raggruppare i vari paesi sulla base delle loro abitudini alimentari utilizzando

la PROC CLUSTER:

Finestra di Program Editor

PROC CLUSTER DATA=lib.pro METHOD=complete OUTTREE=albero;

VAR RedMeat WhiteMeat Eggs Milk Fish Cereals Starch Nuts FrVeg;

ID country;

RUN;

PROC TREE DATA=albero HORIZONTAL OUT=gruppi N=4 ;

ID country;

RUN;

Vediamo le istruzioni una per una:

- DATA= indica il dataset delle osservazioni che stiamo raggruppando in cluster;

Page 46: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 42

Fig. 5.5: Dendorgramma ottenuto dalla PROC TREE

- METHOD= tramite questa istruzione specifichiamo secondo quale criterio vogliamo siano

accorpate le unita. Il SAS ne prevede 11; in questo caso abbiamo scelto la distanza

del legame completo (ma i risultati utilizzando la distanza di McQuitty, quella basata

sui centroidi e sulla media sono molto simili);

- OUTTREE= con questa opzione indichiamo il nome di un file esterno in cui memorizzare

il risultato della procedura; tali informazioni sono quelle che servono alla procedura

successiva (PROC TREE) per costruire l’albero degli accorpamenti;

- con l’istruzione VAR specifichiamo quali sono le variabili da considerare per il calcolo

delle distanze; se la omettiamo verranno usate tutte le variabili numeriche;

- il SAS utilizzera il valore della variabile indicata con l’istruzione ID per identificare le

unita statistiche, in questo caso vedremo immediamente quali sono i Paesi accorpati

ad ogni passo, se la omettiamo verra usato il numero dell’osservazione;

La PROC TREE e la procedura che crea in dendrogramma, qui vediamo le opzioni:

- HORIZONTAL perche l’albero sia disegnato in orizzontale (il valore predefinito e vertica-

le);

- ID ha il significato gia visto;

- OUT= indichiamo il nome di un dataset che memorizzera il gruppo di appartenenza della

singola unita statistica al passo di nostro interesse indicato nell’opzione che segue;

- N= indica il numero di gruppi a cui siamo interessati.

Page 47: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 43

Dallo studio dell’albero (in figura 5.5) e della storia dei raggruppamenti possiamo in-

dividuare i cluster. Analizzando poi la distribuzione delle variabili all’interno dei cluster

possiamo individuare quali sono le piu significative per interpretare il fenomeno oggetto di

studio. Per prima cosa dobbiamo correttamente collegare il file che contiene le informazioni

riguardanti l’appartenenza ai gruppi con i dati originali e quindi procedere (per esempio)

con delle analisi descrittive. Nel nostro caso e possibile individuare principalmente 4 gruppi;

il primo e formato dai paesi dell’Europa Nord-Occidentale, in cui e alto il consumo di carni,

uova e latte; uno di paesi poveri (Bulgaria, Romania e Yugoslavia) il cui consumo e sotto la

media per tutti i tipi di cibo tranne i cereali; un gruppo, che comprende l’Italia, con scarso

consumo di alimenti proteici ma di cereali, frutta e verdura ed in fine il gruppo formato da

Portogallo, Spagna e Germania dell’Est, analogo al precedente ma con minore consumo di

cereali e maggiore consumo di pesce.

5.7 PROC FACTOR

La PROC FACTOR implementa l’analisi delle componenti principali e alcune sue particolariz-

zazioni come l’analisi fattoriale. L’analisi puo partire da dati multivariati grezzi come da

matrici di correlazione o matrici di covarianze. Consideriamo gli stessi dati dell’esempio

precedente.

Finestra di Program Editor

PROC FACTOR DATA=lib.pro NPLOT=3 SCREE ROTATE=v OUT=fact NFACTORS=3 ;

VAR RedMeat WhiteMeat Eggs Milk Fish Cereals Starch Nuts FrVeg ;

RUN;

La sintassi minima e costituita da PROC FACTOR e RUN; ma vediamo, oltre all’ormai solito

DATA= che indica qual e il dataset attivo, qualche interessante opzione:

- NPLOT indica il numero di fattori di cui fare il grafico; specificando NPLOT=n tutte le

coppie dei primi n fattori saranno rappresentate graficamente;

- SCREE produce una rappresentazione grafica degli autovalori

- ROTATE= specifica il metodo di rotazione prescelto, il valore di default e nessuno e v

indica la rotazione varimax

- OUT= crea un dataset che contiene tutti i dati gia memorizzati nel dataset iniziale e

indicato dopo DATA= piu le stime dei punteggi sui fattori per tutte le unita statisti-

che in variabili che si chiameranno factor1, etc.; questa opzione va usata assieme a

NFACTORS=

- NFACTORS= specifica il numero di variabili che contengono i punteggi fattoriali da

memorizzare

- VAR e l’istruzione che indica quali variabili devono essere coinvolte nel calcolo dei fattori

Page 48: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 44

L’OUTPUT della PROC FACTOR puo includere medie, deviazioni standard, correlazioni,

autovalori, autovettori, stime delle comunanze, le soluzioni ruotate e non ruotate, la varianza

espressa da ciascun fattore ignorando o eliminando altri fattori, rappresentazioni grafiche dei

fattori ruotati e non ruotati, punteggi fattoriali, etc.

Di seguito riportiamo solo i punteggi fattoriali della soluzione ruotata in cui vediamo che

il primo fattore coglie la variabilita dovuta al consumo delle carni bianche e delle uova, la

seconda essenzialmente quella del consumo del latte e il terzo quella del consumo di pesce.

Finestra di Output

Rotated Factor Pattern

Factor1 Factor2 Factor3

RedMeat 0.19631 0.62548 0.20536

WhiteMeat 0.93782 0.06740 -0.18199

Eggs 0.72908 0.43276 0.22308

Milk 0.25140 0.84634 0.12491

Fish -0.15646 0.08808 0.91758

Cereals -0.49204 -0.51394 -0.60082

Starch 0.54011 0.03545 0.57544

Nuts -0.63955 -0.56753 -0.11689

FrVeg 0.07907 -0.69118 0.47146

Variance Explained by Each Factor

Factor1 Factor2 Factor3

2.4863837 2.3723048 1.9106681

Final Communality Estimates: Total = 6.769357

RedMeat WhiteMeat Eggs Milk Fish

0.47193415 0.91716435 0.76859946 0.79509704 0.87418679

Cereals Starch Nuts FrVeg

0.86722031 0.62411676 0.74477733 0.70626033

5.8 PROC LOGISTIC

La PROC LOGISTIC stima modelli di regressione logistica per variabili risposta di tipo dico-

tomico o ordinale con il metodo della massima verosimiglianza. I sottoinsiemi di variabili

esplicative possono essere scelti sulla base di diversi metodi di selezione ed e possibile otte-

nere una vasta diagnostica per i modelli a risposta dicotomica. I possibili legami sono logit,

normit e log-log.

La sintassi minima e:

PROC LOGISTIC DATA=nomefilesas7bdat;

MODEL variabiledipendente = listadellevariabiliindipendenti;

RUN;

Esempio 5.7: Test d’urto

Consideriamo i dati riguardanti dei test d’urto condotti su una serie di macchine allo scopo

verificare il tipo e l’entita dei danni subiti dai manichini da test inseriti nell’abitacolo. Nel

dataset originale le variabili rilevate erano la marca, il modello e l’anno di produzione del-

l’automobile, quattro variabili per misurare i danni alla testa, alla gamba destra, alla gamba

Page 49: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 45

sinistra e al petto, la tipologia di protezione (airbag, cinture, etc.), se il manichino fosse al

posto dell’autista o del passeggero, il peso, il numero di porte e la tipologia dell’auto.

Dopo aver creato il dataset con le variabili di interesse e necessario dedicare un po’ di tem-

po ad uno studio preliminare delle informazioni. Attraverso la distribuzione delle frequenze

semplici rileviamo che non sempre esse si presentano nella forma a noi piu utile. Dobbiamo

controllare e, in caso ricodificare, le variabili, nel tentativo di trovare un compromesso tra

esaustivita e sintesi. Inoltre, puo capitare che una variabile ritenuta importante a priori si

presenti con una distribuzione anomala oppure “non sia una variabile” nella sottopopolazione

di interesse.

La prima questione da affrontare e la definizione della variabile dipendente. Decidiamo

di studiare i feriti gravi e a questo scopo creiamo la variabile ferito che assume valore 1

per tutte le unita che hanno riportato una misura di danno alla testa superiore a 1000 e 0

altrimenti.

Finestra di Program Editor

DATA crashtest;

SET crashtest;

IF headIC> 1000 THEN ferito=1;

ELSE ferito=0;

(...)

La seconda questione e la scelta delle variabili esplicative, infatti puo capitare che due o

piu variabili siano tra loro fortemente dipendenti, potendo creare, ad esempio, probelmi di

collinearita e quindi instabilita nelle stime. Nel nostro esempio considereremo come variabili

esplicative solo la posizione del manichino (autista o passeggero - dp), il peso della macchina

(wt) e il tipo di protezione utilizzata (protez).

Il passo seguente e quello di procedere con l’analisi bivariata tra le variabili indipendenti

e quella risposta. Con la PROC FREQ creiamo le tabelle a doppia entrata e calcoliamo gli

indici di associazione (ad esempio il χ2 o il V di Cramer) per le variabili nominali ed ordi-

nali, l’odds ratio per le variabili dicotomiche mentre un’analisi di regressione logistica per

ciascuna variabile quantitativa. Al termine di questa fase avremo individuato le variabili

stocasticamente indipendenti dalla variabile risposta, quelle cioe che non contribuiscono alla

sua spiegazione e possiamo eventualmente scremare ulteriormente l’insieme di variabili da

inserire nel modello.

Siamo pronti per svolgere a questo punto l’analisi di regressione logistica.

Finestra di Program Editor

PROC LOGISTIC DATA=crashtest DESCENDING;

CLASS dp protez;

MODEL ferito = dp protez wt / CTABLE;

RUN;

Vediamo alcune delle istruzioni opzionali:

- DESCENDING e un’opzione della procedura per invertire l’ordine delle risposte della

variabile dicotomica (noi siamo abituati a pensare 1=evento, 0=non evento, mentre il

valore predefinito in SAS e 1=evento, 2= non evento, siccome vengono messi in ordine

Page 50: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 46

crescente risultano associati il nostro 0 al suo 1 ed il nostro 1 al suo 2; con DESCENDING

stabiliamo che venga effettuata l’associazione piu coerente con il nostro usuale modo

di ragionare);

- CLASS con questa istruzione indichiamo a SAS quali variabili sono di natura dicotomica,

nominale o ordinale per cui deve stimare un parametro per ogni singola modalita. Per

rendere identificabile il modello, SAS pone uguale a zero il parametro associato alla

modalita che risulta ultima nell’ordinamento della variabile. Analogamente al momento

del calcolo degli odds ratio, questi saranno calcolati rispetto a questa modalita. E

importante tenere conto di questi fatti nell’interpretazione dei valori dei parametri.

- CTABLE opzione dell’istruzione MODEL= che stampa la tabella di classificazione del mo-

dello per la distribuzione delle osservazioni classificate correttamente e scorrettamente;

Tra le opzioni che non vediamo ricordiamo:

- SELECTION= specifica il metodo per selezionare le variabili nel modello (BACKWARD,

FORWARD oppure STEPWISE);

- SLE= serve per specificare il livello di significativita per accettare l’ingresso di una

variabile nel modello, mentre SLS= specifica quello per rimanere nel modello;

- ITPRINT stampa la storia delle iterazioni del modello.

Il risultato dell’elaborazione e stampato nella finestra di OUTPUT. Tra le altre cose,

troviamo la stima di massima verosimiglianza dei parametri, la stima dell’errore standard,

la statistica χ2 basata sul test di Wald, il p-value di tale statistica ed infine l’odds ratio ed

il relativo intervallo di confidenza. Alla fine ci sono alcuni indicatori di associazione tra le

probabilita predette e le risposte osservate. Riportiamo di seguito una parte dell’OUTPUT.

Finestra di Output

Analysis of Maximum Likelihood Estimates

Standard Wald

Parameter DF Estimate Error Chi-Square Pr > ChiSq

Intercept 1 -3.0084 0.6184 23.6664 <.0001

DP Driver 1 0.4845 0.1308 13.7099 0.0002

protez Motorized_belts 1 0.0786 0.3430 0.0525 0.8187

protez d_airbag 1 -1.3584 0.4195 10.4866 0.0012

protez manual_belts 1 1.1667 0.2220 27.6174 <.0001

Wt 1 0.000493 0.000199 6.1230 0.0133

Odds Ratio Estimates

Point 95% Wald

Effect Estimate Confidence Limits

DP Driver vs Passenger 2.635 1.578 4.401

protez Motorized_belts vs passive_belts 0.966 0.330 2.830

protez d_airbag vs passive_belts 0.230 0.064 0.819

protez manual_belts vs passive_belts 2.868 1.286 6.397

Wt 1.000 1.000 1.001

Notiamo che il modello e abbastanza interessante; essere dalla parte del guidatore e piu

pericoloso che essere dalla parte del passeggero e avere gli airbags e decisamente protettivo

mentre il peso (e quindi la massa della macchina) non ha un’influenza significativa quando

stiamo studiando i danni alla testa.

Page 51: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 47

5.9 PROC CORRESP

La PROC CORRESP consente di effettuare l’analisi delle corrispondenze semplici e multiple sia

su dati individuali che su tabelle di contingenza. La sintassi minima e:

PROC CORRESP DATA=nomefilesas7bdat < MCA >;

TABLES lista di variabili;

oppure

VAR lista di variabili;

RUN;

Ci sono due modi diversi di procedere. Se abbiamo dati individuali di tipo categoriale

useremo l’istruzione TABLES, se, invece, i dati sono gia in forma di tabella useremo l’istruzione

VAR; le due istruzioni sono mutuamente esclusive ma una delle due deve essere specificata.

Tutte le altre istruzioni sono opzionali.

MCA e l’opzione necessaria per fare un’analisi delle corrispondenze multiple.

Esempio 5.8: Tipologie di appartamenti

In questo esempio consideriamo i dati sulle caratteristiche di 117 appartamenti. Sono state

rilevate le seguenti variabili: costo dell’affitto (in Lire), area in metriquadrati, eta dello

stabile, numero di servizi disponibili (frigorifero, lavapiatti, etc.), se si trova in un quartiere

residenziale, se e un appartamento d’angolo, se e stato ristrutturato su misura.

Prima di avviare la procedura dobbiamo preparare i dati, il SAS infatti usera nella

finestra di OUTPUT e nei grafici le modalita delle variabili e siccome i nostri dati, come

spesso succede, sono stati codificati con numeri per noi diventera difficile interpretarli. Per

ovviare al problema possiamo ricodificare i dati dal formato numerico a quello alfanumerico.

In un DATA STEP ricodifichiamo le variabili con una serie di istruzioni IF:

Finestra di Program Editor

(...)

IF mq^=. & mq<=95 THEN bmq=’ 70-95mq’;

IF mq>95 & mq<=120 THEN bmq=’95-120mq’;

IF mq>120 & mq<=150 THEN bmq=’120-150mq’;

IF mq>150 & mq<=200 THEN bmq=’150-200mq’;

IF mq>200 & mq<=250 THEN bmq=’200-250mq’;

IF mq>250 THEN bmq=’>250mq’;

IF res=1 THEN bres=’ res’;

IF res=0 THEN bres=’nores’;

(...)

Per esempio abbiamo ricodificato la variabile mq (area in metriquadrati) in 6 classi: la nuova

variabile si chiama bmq, e di tipo carattere e ogni modalita risulta autoesplicativa. Anche le

variabili dicotomiche sono state trasformate in variabili di tipo carattere (bres). Con criteri

analoghi ricodifichiamo le variabili che riguardano i servizi (bser), il costo dell’affitto (baff),

l’eta della casa (bage), essere d’angolo (bang) e essere ristrutturato su misura (bsum).

A questo punto e conveniente studiare la distribuzione delle frequenze. Particolare

attenzione va posta alle modalita che presentano frequenze basse.

Il codice per un’analisi delle corrispondenze multiple e:

Page 52: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 48

Finestra di Program Editor

PROC CORRESP DATA=lib.case GREENACRE BENZECRI OUTC=coord MCA MISSING;

TABLES bres bang bsum bser bage baff bmq ;

RUN;

Oltre a TABLES che e l’istruzione necessaria perche i nostri dati sono individuali, anche in

questo caso abbiamo usato alcune istruzioni opzionali:

- GREENACRE calcola le inerzie corrette secondo i criteri di Greenacre, se si desiderano

quelle usuali bisogna non specificare nulla (lasciare il default), se si vogliono entrambe

bisogna specificare anche l’opzione UNADJUSTED;

- BENZECRI calcola le inerzie corrette secondo il metodo proposto da Benzecri;

- OUTC= crea un file esterno, nel nostro caso di nome coord, che contiene alcune in-

formazioni sull’analisi, tra cui le coordinate necessarie per la stampa di eventuali

grafici;

- MCA come si e detto e l’opzione per l’analisi delle corrispondenze multiple, non avendo

specificato diversamente il numero delle dimensioni sara 2;

- MISSING coinvolge i dati mancanti nell’elaborazione considerando il dato mancante una

modalita della variabile (altrimenti le osservazioni con dati mancanti vengono eliminate

dall’analisi);

Pur non avendola utilizzata ci sembra doveroso segnalare tra le istruzioni che non vediamo

in dettaglio SUPPLEMENTARY: i valori delle modalita delle variabili specificate dopo tale istru-

zione, pur non contribuendo al calcolo degli autovalori ed autovettori vengono riportate tra

i risultati e proiettate nel grafico.

Nella finestra di OUTPUT, visto che non abbiamo fatto richieste specifiche, troveremo:

- la radice degli autovalori, gli autovalori, il test χ2 e la percentuale di inerzia spiegata

corretta secondo Greenacre;

- le coordinate di colonna per i due assi principali;

- una tabella di statistiche per i punti-colonna;

- una tabella con i contributi relativi di ogni punto colonna all’inerzia globale;

- una tabella con la porzione di varianza spiegata da ogni variabile in relazione ad ogni

asse principale;

- una tabella con gli indicatori per ogni asse dei punti che contribuiscono maggiormente

a caratterizzare l’asse stesso e per ogni punto e riportato l’indice dell’asse lungo il quale

il punto e meglio rappresentato;

- una tabella con la quota di varianza del punto spiegata dall’asse considerato.

Il grafico, invece, non fa parte dei risultati previsti per default.

Abbiamo memorizzato parte dei dati nel file coord, con il prossimo passo di DATA inizia-

lizziamo le ulteriori variabili necessarie alla creazione del grafico, per il quale utilizziamo la

procedura GPLOT.

Page 53: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 49

Fig. 5.6: Grafico di dispersione per l’analisi delle corrispondenze.

Finestra di Program Editor

DATA coord;

SET coord;

y=dim1;

x=dim2;

Xsys=’2’;

Ysys=’2’;

text=_name_;

size=1;

label y=’asse y’ x=’asse x’;

KEEP x y text size Xsys Ysys inertia;

RUN;

PROC GPLOT DATA=coord;

PLOT y*x=1 / ANNOTATE=coord FRAME HAXIS=-1.6 to 2.2 by 0.2

VAXIS=-1.6 to 2.4 by 0.2

HREF=0 VREF=0;

RUN;

ANNOTATE= permette che sul grafico vengano usate le etichette attribuite alle coordinate,

come sono memorizzate in coord, HREF= e VREF= specificano quale sara l’origine degli assi.

La figura 5.6 mostra il grafico ottenuto mentre la prima parte dei risultati segue nella

finestra di OUTPUT.

La disposizione delle modalita nel grafico segue un andamaento a ferro di cavallo che

indica una sostanziale unidimensionalita delle frequenze osservate (effetto Guttman). Non ci

sorprende infatti vedere che c’e praticamente un solo asse principale, lungo il quale si snodano

le modalita del prezzo dell’affitto vicine, di volta in volta, all’aumentare dei servizi disponibili

e dei metri quadrati. Notiamo poi, che nel quadrante dove ci sono gli appartamenti piu ampi

e costosi troviamo la modalita che riguardano la ristrutturazione su misura mentre l’eta della

casa segue un andamento contrario.

Page 54: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

5. Esempi di procedure statistiche 50

Finestra di Output

Benzecri Adjusted Inertia Decomposition

Principal Adjusted Cumulative

Inertia Inertia Percent Percent 13 26 39 52 65

----+----+----+----+----+---

0.39748 0.08824 63.62 63.62 ************************

0.27019 0.02207 15.91 79.53 ******

0.23284 0.01102 7.94 87.47 ***

0.21018 0.00617 4.45 91.92 **

0.20041 0.00451 3.25 95.17 *

0.18823 0.00280 2.02 97.19 *

0.18435 0.00234 1.69 98.88 *

0.17158 0.00112 0.81 99.69

0.16073 0.00043 0.31 100.00

Total 0.13871 100.00

Page 55: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

6. ALTRO

In questo capitolo e riportato qualche suggerimento per affrontare varie problematiche, co-

muni tra chi utilizza SAS. Sono poche, piccole cose che possono risolvere qualche inevitabile

momento di impasse.

6.1 Dataset di versioni diverse

La lettura (e di conseguenza l’utilizzo) di dataset creati con versioni precedenti di SAS non

e automatica. Questo problema si puo facilmente risolvere tenendo i file separati in due

diverse directory, alle quali ci si riferira con i relativi nomi logici e sfruttando un’opzione

dell’istruzione LIBNAME. Supponiamo che i file su cui desideriamo lavorare siano stati creati

con la versione 6.12, allora dovremmo scrivere il seguente codice:

Finestra di Program Editor

LIBNAME lib1 V612 ’x:\directoryconfilevecchi’;

LIBNAME lib2 ’x:\directoryconfilenuovi’;

L’opzione V612 che compare tra il nome logico lib1 e la relativa directory che contiene

i file vecchi permette al SAS di riconoscerli e di gestirli nel modo corretto. Eventuali ela-

borazioni e quindi nuovi dataset potranno essere memorizzati nella nuova directory indicata

dal nome logico lib2 con il formato attuale. Se i file vecchi fossero stati creati con un’altra

versione di SAS, allora bisognerebbe sostituire V612 con l’opzione relativa.

6.2 Cambio di formato: numerico vs carattere

Puo capitare che le nostre variabili, pur essendo di natura numerica, siano state acquisite

in modo non corretto e che, controllandone il tipo tramite la PROC CONTENTS, si scopra che

sono considerate ’char’. Supponiamo di avere una variabile num, erroneamente memorizzata

come di tipo char. Per ottenere il cambio di tipo basta una riga di istruzioni:

Finestra di Program Editor

numnuova=num+0;

Analogamente possiamo trasformare variabili di tipo numerico in variabili di tipo carat-

tere; la riga di istruzioni e la seguente:

Finestra di Program Editor

varnuovachar=varvecchianumerica||"";

Page 56: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

6. Altro 52

6.3 Ricostruzione di gruppi

Capita spesso che le osservazioni oggetto delle analisi siano logicamente raggruppabili e che

sia nostro interesse collegarle. Esempio tipico e il caso in cui il dataset e composto dai singoli

individui delle famiglie oggetto d’indagine e che ci interessi considerare le famiglie e non

solo gli individui. Per creare un nuovo dataset che raggruppi correttamente gli individui

in famiglie si puo scegliere tra diverse strade piu o meno contorte; qui riportiamo il modo

suggerito da SAS stesso, che utilizza alcuni costrutti interessanti come le variabili FIRST e

LAST, gli array e l’istruzione RETAIN.

In un DATA STEP il SAS identifica l’inizio e la fine di ciascun gruppo precedentemente

individuato da un’operazione di ordinamento (PROC SORT), creando due variabili temporanee

per ciascun gruppo: FIRST.nomevariabile e LAST.nomevariabile. Queste variabili tem-

poranee sono utilizzabili nella programmazione ma non sono memorizzate nel dataset finale.

Quando una osservazione e la prima di un gruppo, il valore della FIRST.nomevariabile

e posto a 1; per tutte le altre osservazioni dello stesso gruppo, quindi, il valore della

FIRST.nomevariabile e posto a 0. Analogamente, se un’osservazione e l’ultima del pro-

prio gruppo, il valore di LAST.nomevariabile e posto a 1 e per tutte le altre e posto a

0.

In SAS gli array, a differenza di altri linguaggi di programmazione, costituiscono sem-

plicemente una maniera conveniente di identificare gruppi di variabili; non costituisce una

struttura di dati ed esiste solo per la durata del DATA STEP. Per definire un array bisogna

utilizzare la corrispondente istruzione che ha la seguente forma:

Finestra di Program Editor

ARRAY nomedell’array (numerodeglielementi) elencodivariabili;

Con l’istruzione ARRAY, quindi, stiamo definendo:

• nomedell’array: il nome che identifica l’insieme di variabili

• numerodeglielementi: il numero degli elementi che verranno raggruppati

• elencodivariabili: i nomi delle variabili che saranno momentaneamente raggruppate

nell’array

Ogni volta che definiamo un array, SAS automaticamente associa a ciascun elemento

dell’array un riferimento che non e altro che la posizione dell’elemento nell’array.

A questo punto vediamo l’esempio concreto in cui facciamo collassare le osservazioni

appartenenti allo stesso gruppo in un’unica osservazione.

Finestra di Program Editor

DATA in;

INPUT gr y s $;

CARDS;

1 2 a

2 1 c

1 5 a

1 9 b

1 10 c

2 2 a

Page 57: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

6. Altro 53

2 1 b;

RUN;

PROC SORT;

BY gr; RUN;

La prima parte dell’esempio e costituito semplicemente da un DATA STEP per vedere i dati

su cui opereremo; abbiamo 7 osservazioni e tre variabili (gr,y e s) che vengono memorizzate

nel dataset in. La prima variabile (gr) e quella che ci permette di identificare i gruppi, che

sono 2, quindi abbiamo ordinato le osservazioni secondo questa variabile.

Finestra di Program Editor

DATA out (KEEP=gr y1-y5 s1-s5);

RETAIN gr y1-y5 s1-s5;

ARRAY ay (5) y1-y5;

ARRAY as (5) $ s1-s5;

SET in;

BY gr;

IF FIRST.gr THEN DO;

i=1;

DO j=1 TO 5;

as(j)=’ ’;

ay(j)=.;

END;

END;

as(i)=s;

ay(i)=y;

IF LAST.gr THEN OUTPUT;

i+1;

RUN;

A questo punto carichiamo (con il comando SET) il dataset in e con l’opzione KEEP=

dell’istruzione DATA indichiamo che al termine delle elaborazioni salveremo un nuovo dataset

di nome out che conterra le variabili gr, y1, y2, y3, y4, y5, s1, s2, s3, s4 e s5.

Con il comando RETAIN indichiamo al SAS di non reinizializzare a dato mancante i valori

delle variabili indicate, pur scorrendo le righe del dataset iniziale.

Con le due istruzioni ARRAY dichiariamo le due strutture, la prima di nome ay di dimen-

sione 5 e che raggruppa le variabili da y1 a y5 e la seconda di nome as sempre di dimensione

5 e che raggruppa le variabili da s1 a s5. I vari gruppi avranno verosimilmente numero-

sita diverse quindi la dimensione dell’array dovra essere pari o maggiore alla numerosita del

gruppo piu grande.

Inizia quindi la fase operativa: se l’osservazione e la prima del gruppo, si entra in un

ciclo in cui il contatore i viene inizializzato a 1 e tutti gli elementi degli array, scorsi con

il contatore j, vengono inizializzati a dato mancante. Usciti dal ciclo di inizializzazione si

passa all’assegnazione; ai primi elementi dei due array (as(1) e ay(1)) vengono assegnati

i valori delle rispettive variabili s e y della riga (osservazione) che stiamo leggendo. Quindi

viene effettuato il confronto sulla variabile LAST e se l’osservazione non e l’ultima del gruppo

allora il contenuto del buffer fin qui completato non viene scritto nel nuovo dataset; viene

aggiornato il contatore i e si passa alla riga seguente. La riga dopo non sara la prima del

gruppo, quindi non si entrera nel ciclo di inizializzazione ma si passera subito alla fase di

assegnazione, questa volta del secondo elemento (as(2) e ay(2)) con i valori delle rispettive

variabili per quella riga (osservazione).

Page 58: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

6. Altro 54

Quando si giungera all’ultimo elemento del gruppo, verra forzata la scrittura nel dataset

finale e, siccome la riga successiva sara necessariamente il primo elemento del gruppo se-

guente, verranno reinizializzati a dato mancante tutti gli elementi dell’array e si ricomincera

l’assegnazione dal primo.

E chiaro che la struttura di tutte le righe del dataset sara uguale e se la numerosita di un

gruppo e inferiore alla dimensione massima, gli ultimi elementi dell’array e quindi le variabili

corrispondenti nel dataset finale saranno dati mancanti.

6.4 Accenni sulle macro

Con una macro di SAS si intende un insieme di istruzioni SAS che possono ripetutamente

essere richiamate oppure che possono sostituire nomi di dataset o variabili con nomi simbolici.

E codice di programmazione che consiste in un sistema di variabili, istruzioni e funzioni

che vengono direttamente processate da SAS attraverso il processore di macro. Le macro

utilizzano le risorse in modo piu efficiente e permettono un maggior controllo del processo

dinamico soprattutto nelle situazioni in cui lo stesso codice deve essere ripetuto spesso. Se

siete pratici di altri linguaggi di programmazione, potete considerare le macro come una

subroutine.

Per esempio, nel caso si debba ripetere piu volte la stessa struttura di istruzioni, possiamo

definire la procedura o, in generale, l’insieme di operazioni necessarie, utilizzando le variabili

macro, dando loro un nome e indicandone i parametri.

SAS invoca lo strumento delle macro quando incontra uno dei seguenti caratteri: l’am-

persand (&) o il simbolo di percentuale (%) seguiti dal nome della macro variabile. Una volta

che la macro e stata definita puo essere richiamata da qualsiasi punto del nostro programma

SAS.

Schematicamente teniamo sempre presente che:

• per essere utilizzata una macro deve essere definita prima di essere chiamata

• deve iniziare con: %MACRO nomedellamacro

• deve terminare con: %MEND

• se si dimentica di terminare una macro allora il compilatore continuera a considerare

come parte della macro tutto cio che viene di seguito

• una macro puo contenere codice di DATA e PROC STEP, funzioni e istruzioni di program-

mazione macro.

• ci sono due tipi di riferimenti macro:

– riferimenti a variabili macro, che sono precedute da &

– definizioni e chiamate a macro, che sono precedute da %

• i nomi della macro seguono le regole di sintassi dei nomi di SAS

Quando viene trovata una variabile macro nel codice, allora viene creata una variabile

SAS. I valori delle variabili macro vengono memorizzati in un insieme di tabelle simboliche.

Ci sono due tipi di variabili macro:

- definite dal sistema

Page 59: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

6. Altro 55

- definite dall’utente

Tramite l’istruzione %LET si definisce il valore della variabile macro e puo essere utilizzato

in punto qualsiasi del programma SAS. La forma dell’istruzione e la seguente:

Finestra di Program Editor

%LET nomedellavariabilemacro=valore;

Se viene omessa, il valore della variabile viene posto a 0. Per controllare il valore di una

variabile si puo utilizzare l’istruzione %PUT nomevariabilemacro; se si da come paramtero

ALL , si otterra la lista di tutte le variabili correnti.

La cosa piu interessante e parametrizzare le macro per renderle flessibili e quindi utiliz-

zabili con diversi valori d’ingresso. Il numero di parametri dipende dalla definizione della

macro ed e molto importante la loro posizione nell’elenco; al momento di passarli, quindi,

bisogna ricordarsi l’ordine ed il numero dei parametri dichiarati perche vengano interpretati

nel modo corretto.

Vediamo un brevissimo esempio. Scriviamo una macro per la creazione di un modello di

regressione:

• il nome della macro e provareg

• vi sono coinvolte due variabili macro: &x e &y

Finestra di Program Editor

%MACRO provareg(y, x, data=_last_);

PROC REG DATA=&data;

MODEL &y=&x;

RUN;

%MEND;

Nel seguito del programma potremo richiamare questa macro e passarle come parametri

due variabili che verranno sostituiti nel codice per la stima del modello di regressione. Se non

diamo specificazioni diverse, allora la macro considerera l’ultimo dataset creato, all’interno

del quale, naturalmente, devono esistere le variabili che vengono passate alla macro.

Finestra di Program Editor

%provareg(v1,v2);

Page 60: H:/Laboratorio/sas/q1 SAS 2008/copertina1 · 2018. 6. 8. · Quaderno 1 Claudio Agostinelli e Silvia Sartorelli Introduzione al linguaggio di SAS System 2008. ... il capitolo 1 `e

RIFERIMENTI BIBLIOGRAFICI

Agostinelli C., Sartorelli S. (1998) Introduzione al linguaggio di Sas System, manuscript.

Agostinelli C., Sartorelli S. (1999) Introduzione al linguaggio di SAS System, Quaderno 1,

Quaderni ASID, Facolta di Scienze Statistiche, Universita di Padova, 1999.

Capiluppi C. (1997), Introduzione a Sas System, ed. Cleup, Padova.

Bianchi-Bandinelli, Bracci e La Forenza, (1989) Il sistema SAS, ed. Franco Angeli, Milano.

Sas Institute Inc., (1993) SAS Procedure Guide, Version 6, Sas Institute Inc., CARY, NC,

USA.

Sas Institute Inc., (1993) SAS Language, Version 6, Sas Institute Inc., CARY, NC, USA.

Sas Institute Inc., (1993) SAS/STAT Users Guide VOL.1, Version 6, Sas Institute Inc.,

CARY, NC, USA.

Sas Institute Inc., (1993) SAS/STAT Users Guide VOL.2, Version 6, Sas Institute Inc.,

CARY, NC, USA.