Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a...

64
Imparare SAS Gianluca Della Vedova Dipartimento di Statistica Universit` a di Milano-Bicocca [email protected] http://www.statistica.unimib.it/utenti/dellavedova/ Versione del 21 novembre 2003

Transcript of Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a...

Page 1: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Imparare

SAS

Gianluca Della VedovaDipartimento di Statistica

Universita di Milano-Bicocca

[email protected]://www.statistica.unimib.it/utenti/dellavedova/Versione del 21 novembre 2003

Page 2: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Nota Bene. Questo testo non sostituisce in alcun modo il libro di testo delcorso “Laboratorio Statistico-Informatico”, inoltre il programma del corso potrebbe

non coincidere con il contenuto del presente testo.

Copyright (c) 2002-2003 Gianluca Della Vedova

e garantito il permesso di copiare, distribuire e/o modificare questo docu-mento seguendo i termini della Licenza per Documentazione Libera GNU,Versione 1.1, pubblicata dalla Free Software Foundation; con Sezione NonModificabile Ringraziamenti, con i Testi Copertina “Gianluca Della Vedo-va” e “Imparare SAS”, e senza Testi di Retro Copertina. Una copia dellalicenza e acclusa nella sezione intitolata Licenza per Documentazione LiberaGNU.

Page 3: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Indice

1 Introduzione 5

1.1 Prefazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2 Convenzioni tipografiche . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3 La vera introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 I fondamenti 7

2.1 I linguaggi di programmazione . . . . . . . . . . . . . . . . . . . . . . . 7

2.2 Istruzioni condizionali . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.3 Schema di ciclo produttivo . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.4 Il sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.5 Sintassi basilare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.6 Il dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.7 Relazione fra dataset e filesystem . . . . . . . . . . . . . . . . . . . . . 13

2.8 SAS come linguaggio di programmazione . . . . . . . . . . . . . . . . . 14

2.9 Le librerie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.10 Operazioni fondamentali su dataset . . . . . . . . . . . . . . . . . . . . 15

2.11 Creare un dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.12 Leggere e salvare un dataset . . . . . . . . . . . . . . . . . . . . . . . . 16

2.13 Esportare un dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.14 Creare e cancellare variabili . . . . . . . . . . . . . . . . . . . . . . . . 20

2.15 Visualizzare un dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.16 Variabili indicizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.17 Estrarre osservazioni da un dataset . . . . . . . . . . . . . . . . . . . . 22

2.18 Istruzioni condizionali . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Ancora operazioni su dataset 25

3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2 Inserire i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.3 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.4 Ordinare un dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.5 Raggruppare osservazioni in un dataset . . . . . . . . . . . . . . . . . . 31

3.6 Ristrutturare dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.7 Stampare i dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.8 Riepilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 Calcolare delle statistiche 37

4.1 Estrazione di osservazioni significative . . . . . . . . . . . . . . . . . . . 37

4.2 Altre statistiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.3 Creare un dataset con le statistiche . . . . . . . . . . . . . . . . . . . . 39

Page 4: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

5 Rappresentazioni grafiche 415.1 La proc plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2 La proc gplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.3 Una migliore rappresentazione testuale . . . . . . . . . . . . . . . . . . 42

6 Dai dati alle informazioni 456.1 Analisi delle frequenze . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.2 La proc corr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.3 Tabelle a 2 entrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.4 Analisi di regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.5 Grafico di regressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

7 Esercizi riepilogativi 51

8 Soluzioni degli esercizi 53

Elenco dei problemi 55

Elenco dei programmi 56

Elenco delle figure 57

Indice analitico 58

9 Licenza per Documentazione Libera GNU 59

Page 5: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Introduzione

1.1 prefazione

Questo libro vuole essere una semplice introduzione a SAS per chi non conosce un

SAS r© eSAS/GRAPH r©sono marchiregistrati di SASInstitute Inc.

linguaggio di programmazione. In quanto tale e adatto all’utilizzo in un corso uni-versitario semestrale. I prerequisiti consistono unicamente nella capacita di usare unelaboratore, in quanto si cerchera di trattare gli argomenti in maniera indipendente dalsistema operativo su cui SAS e installato.

1.2 convenzioni tipografiche

Per distinguere un programma SAS anche quando e inserito nel testo, questo sara scrit-to nel carattere macchina da scrivere. Le parole riservate di SAS saranno semprescritte in maiuscolo, ovvero QUESTO e un comando riservato di SAS. I concetti che ven-gono definiti saranno invece scritti in corsivo. Talvolta nel margine esterno apparirannoalcuni approfondimenti.

Ogni programma viene scritto in un modo particolare: ogni riga viene precedutada un numero progressivo scritto con un carattere piu piccolo del testo che segue. Talenumero serve solo come riferimento e non e parte del programma vero e proprio. Ogniprogramma inizia con una intestazione e termina con una riga orizzontale, per megliosepararlo dal testo.

1.3 la vera introduzione

Imparare un linguaggio di programmazione non e semplice, ed imparare il primo lin-guaggio di programmazione e ancora piu difficile, ma il fatto che molte persone decidano(con successo) di imparare a programmare fa capire che tale compito e sicuramente allaportata di tutti. SAS e un linguaggio molto particolare, in quanto e stato studiato perl’analisi statistica di dati. Le finalita specialistiche di SAS hanno comportato una seriedi scelte nella fase di disegno del linguaggio che lo rendono completamente diverso datutti gli altri linguaggi di programmazione.

Questo libro non intende essere una guida all’uso avanzato di SAS, ma vorrebbeguidare il lettore alla scoperta delle funzionalita basilari di SAS. In particolare si in-trodurranno inizialmente alcuni costrutti fondamentali, per poi arricchire progressiva-mente le conoscenze del lettore con approfondimenti continui ed esercitazioni pratichesotto forma di problemi.

Quest’ultima parte mi sembra fondamentale al fine di imparare SAS: il paragone piucalzante e con l’imparare a suonare uno strumento, magari il pianoforte. Sicuramentee molto piu difficile suonare il pianoforte che programmare in SAS, anche perche SAScerca di essere sempre piu semplice da usare con il passare del tempo, mentre il piano-forte non e cambiato sostanzialmente negli ultimi decenni. Pero chi impara a suonare ilpianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze di insegnamen-ti impartiti dal suo insegnante, da chi ha istruito il suo insegnante, ecc. Questo none possibile per l’insegnamento di un linguaggio di programmazione, poiche fino a 50

Page 6: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

6 Introduzione

anni fa non esistevano (in pratica) linguaggi di programmazione: la conseguenza e cheinsegnare a programmare e ancora un’arte che non ha regole prestabilite. Il paragonecon il pianoforte porta a comprendere come l’esercizio continuo e controllato da partedell’insegnante sia il modo migliore per imparare qualcosa di nuovo: in questo casoSAS.

Per questo motivo troverete una serie di esercizi da svolgere: tutti questi esercizivengono risolti nel modo preferito dall’autore, non si vuole escludere la possibilita disoluzioni alternative, semplicemente si vuole garantire ad ognuno di poter seguire unostile coerente in tutto il testo. Chi utilizza il linguaggio Perl e abituato a sentirela frase “There’s More Than One Way To Do It” che e uno dei concetti simbolodi tale linguaggio. Questo permette una grande liberta e vantaggi indiscutibili peril programmatore esperto e fonte inesauribile di confusione per chi non ha ancoraraggiunto una sufficiente esperienza.

Page 7: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

I fondamenti

2.1 i linguaggi di programmazione

Una delle principali limitazioni dei calcolatori attuali e la loro incapacita di compren-dere istruzioni impartite in un linguaggio naturale (siamo tutti talmente abituati aquesto fatto da considerarlo inevitabile, in realta un computer in grado di comprendereun linguaggio naturale permetterebbe di essere enormemente piu produttivi). Pertan-to diventa necessario ricorrere ad un linguaggio artificiale per impartire le istruzioneal computer. In cambio di questo nostro adattamento al linguaggio da utilizzare, ilcomputer ci ricompensera con la sua capacita di effettuare calcoli con una velocita eaffidabilita non possibili per gli esseri umani.

In generale i linguaggi di programmazione devono soddisfare due esigenze contra-stanti: essere sufficientemente vicini ad un linguaggio naturale, in modo da rendere piusemplice scrivere un programma, ed essere sufficientemente vicini ad un codice esegui-bile direttamente dal calcolatore. Per ovviare a questo problema sono stati introdottii compilatori, ovvero programmi che si occupano di tradurre un programma scritto inuno specifico linguaggio di programmazione in codice eseguibile. Questo ha portato allapossibilita di utilizzare linguaggi di programmazione molto piu vicini ad un linguaggionaturale di quanto non fosse possibile pochi decenni fa.

Per fortuna SAS e un linguaggio di programmazione che cerca di essere il piu possi-bile vicino ad un linguaggio naturale, ma comunque sara necessario comprendere comecomportarsi per sfruttare pienamente le potenzialita del linguaggio.

Esistono almeno tre tipologie di linguaggi di programmazione:

• i linguaggi imperativi, dove un programma consiste nelle istruzioni dettagliatesu come completare un assegnamento. Rientrano in questa categoria C, C++,Basic, Pascal, Java e le ricette per la cucina.

• i linguaggi dichiarativi, dove un programma e l’insieme di cio che deve essereottenuto. Esempi di questo tipo di linguaggi sono SQL e gli ordini (“Leggi questolibro e scrivine un riassunto”).

• i linguaggi funzionali, dove un programma viene visto come funzione che ha perargomento un insieme di dati e restituisce il risultato voluto. Esempi di linguaggifunzionali sono Lisp e Scheme.

Il vantaggio dei linguaggi dichiarativi rispetto a quelli imperativi e che i programmisono molto piu sintetici e semplici da comprendere e modificare. Lo svantaggio consistenel fatto che l’interprete del programma deve essere notevolmente piu complesso, inquanto deve sapere come effettuare i compiti richiesti (ad esempio, riferendosi all’e-sempio fatto in precedenza, deve sapere leggere un libro, estrarre le informazioni ivicontenute e sintetizzarle efficacemente). SAS e sostanzialmente un linguaggio in parteimperativo ed in parte dichiarativo, ad esempio l’interprete sa come calcolare numero-se statistiche di un insieme di valori, ma il programmatore deve occuparsi di indicareesplicitamente su quali valori devono essere calcolate le statistiche. Come vedremo in

Page 8: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

8 I fondamenti

Istruzione 1 Istruzione 2

CondizioneVERO FALSO

Figura 2.1: Schema di istruzione condizionale

seguito le componenti dichiarative sono particolarmente potenti e semplici da utilizzare,maggiore difficolta presentano la parti imperative.

2.2 istruzioni condizionali

Una caratteristica della quasi totalita dei risultati che possiamo volere ottenere eche non tutti i dati in ingresso devono essere trattati ugualmente: ad esempio sia-mo interessati soltanto alle filiali che hanno ottenuto almeno un fatturato di EUR1000000. Questo tipo di distinzione viene efficacemente riassunta dalla Figura 2.1, do-ve Istruzione 1 viene eseguita se la condizione e verificata, ed esegue Istruzione 2

altrimenti.Diventa quindi possibili dividere una istruzione condizionale in piu componenti

come segue:

1. la condizione, ovvero un predicato logico che puo assumere solo due valori, veroo falso;

2. una istruzione che permette di determinare quale istruzione deve essere eseguitaimmediatamente dopo la valutazione della condizione

Tale istruzione e solitamente la if condizione then . . . else. La semantica di taleistruzione e: valuta la condizione, se tale condizione e vera allora esegui le istruzioniscritte subito dopo then, altrimenti esegui le istruzioni scritte subito dopo else. Ilfulcro di tale costrutto e pertanto la condizione, per cui ci sembra necessario avere adisposizione uno strumento sufficientemente potente per esprimere condizioni almenomoderatamente complesse.

La nozione di condizione permette di decidere quali istruzioni debbano essere ese-guite. Piu precisamente una condizione puo assumere solo due valori, vero o falso.Alcuni operatori (detti operatori logici o booleani) agiscono sulle condizioni: si trattadegli operatori not, and, or. Gli effetti di tali operatori sono mostrati nella Tabella 2.1.

Page 9: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.3 Schema di ciclo produttivo 9

x y NOT(x) x AND y x OR y x NAND y

falso falso vero falso falso verofalso vero vero falso vero verovero falso falso falso vero verovero vero falso vero vero falso

Tabella 2.1: Semantica degli operatori booleani

2.3 schema di ciclo produttivo

Sotto il nome di SAS intendiamo piu componenti (o strumenti), integrati fra loro, perl’analisi statistica di dati. In particolare SAS e un sistema per l’analisi di dati cheincorpora, fra le altre cose, un editor che permette di scrivere programmi SAS nellinguaggio SAS . Tale programma verra poi interpretato ed eseguito dal sistema SAS.

Tutte queste componenti sono integrate in quello che verra chiamato d’ora in poisemplicemente SAS.

L’obiettivo e la scrittura di un programma in grado di risolvere un problema: nonesistono regole fisse e predeterminate, inoltre non e possibile scrivere un programmacorretto senza prima riflettere adeguatamente sul problema da risolvere (il fatto cheprogrammatori esperti siano in grado scrivere in tempi brevissimi un programma SAScorretto, non deve trarre in inganno chi si affaccia per la prima volta alla programma-zione: cio e possibile solo grazie alle funzionalita del linguaggio SAS che permette didescrivere con poche istruzioni programmi in grado di risolvere problemi non banali).Pertanto diventa di fondamentale importanza la fase di analisi del problema. Una delletecniche piu utilizzate per la progettazione e la cosiddetta top-down, dove il problemaviene diviso in componenti distinte che sono collegate fra loro solo attraverso interfacceben definite.

Ogni progetto software si divide, almeno in prima approssimazione, in tre fasi:

1. Progettazione

2. Implementazione

3. Manutenzione

Si e notato che e necessario affrontare con attenzione la fase di progettazione alfine di minimizzare il costo totale del progetto. Pertanto diventa necessario analizzareaccuratamente il problema da risolvere prima di iniziare con l’implementazione vera epropria.

2.4 il sistema

Una delle caratteristiche piu importanti di SAS e che il sistema SAS e disponibile persvariati sistemi operativi e piattaforme hardware. Infatti SAS e nato come applicazionesu mainframe, ma successivamente e stato portato prima su UNIX1 e su VMS, edinfine su Microsoft Windows2. Pertanto SAS e disponibile su sistemi che variano dai

1Nel 2001 UNIX e un copyright di Santa Cruz Operations (SCO), Inc.2Microsoft Windows e un marchio registrato di Microsoft Corp., Inc.

Page 10: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

10 I fondamenti

FINE

Il programmae corretto?

Test (esecuzione)

Scrittura (editor)

Progetto

no

Figura 2.2: Come si sviluppa un programma

Interprete Editor

Sistema SAS

Programma

usato perscrivere

viene inter-pretato da

Figura 2.3: Schema riassuntivo del sistema SAS

Page 11: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.5 Sintassi basilare 11

personal computer ai mainframe, inclusi vari minicomputer ed enterprise server qualiquelli prodotti da Sun Microsystems r©, Hewlett-Packard r©, IBM r© ed altri.

Per rendere possbile l’utilizzo industriale su tutte questi sistemi operativi, e statonecessario isolare tutte le componenti dipendenti dal sistema operativo dell’implemen-tazione iniziale di SAS, al fine di slegare dal particolare ambiente di utilizzo tutte lefunzionalita del linguaggio SAS. Cio che varia sostanzialmente fra i vari sistemi opera-tivi e l’ambiente (sia grafico che a caratteri) che e a disposizione dell’utente per scriverei programmi SAS e introdurre i dati da analizzare.

Comunque il linguaggio SAS e completamente indipendente dal sistema operativo:cio ne rende ancora piu semplice l’esposizione. Per quanto riguarda lo scopo di questotesto, e sufficiente notare che l’ambiente SAS consiste di alcune componenti fra lorocollegate:• Il Program editor o l’enhanced editor : permette di introdurre, modificare ed

eseguire un programma SAS. E consigliato prendere confidenza con l’uso delprogram editor, in quanto e la componente del sistema SAS che viene utilizzatoper maggior tempo. In particolare e necessario capire come mandare in esecuzioneun programma intero oppure solo una parte del programma, come salvare unprogramma SAS e l’utilizzo dei tasti funzione per muoversi fra le finestre e perrichiamare il programma precedentemente mandato in esecuzione.

• L’output contiene tutti i risultati in formato testuale di un programma SAS.

• Le Finestre grafiche (sui sistemi che le supportano) contengono i risultati informato grafico calcolati dal programma SAS.

• Il Log contiene una copia annotata del programma eseguito. Piu precisamenteper ogni istruzione eseguita viene evidenziata ogni anomalia che si e venuta averificare durante l’esecuzione. L’analisi del log e di gran lunga lo strumento piuutile per individuare gli errori nei programmi SAS.

• L’help contiene le informazioni riguardanti tutte le funzionalita presenti nella in-stallazione di SAS a disposizione. Vista la vastita della documentazione presente,diventa improponibile avere una copia cartacea di tutte le informazioni presentinell’help. Per le stesse ragioni e abbastanza frequente non ricordarsi la sintassiesatta di alcune funzioni che si vogliono utilizzare: l’help di SAS e fondamentaleper superare questi problemi.

Un’altra particolarita di SAS consiste nella sua suddivisione in moduli: infatti alcosiddetto modulo base (in cui si trovano tutte le funzionalita che tratteremo in questotesto) sono disponibili numerosi moduli che permettono di utilizzare nuove funzionalitaavanzate.

2.5 sintassi basilare

Un linguaggio di programmazione deve essere tradotto in maniera non ambigua in azio-ni che il computer deve svolgere: cio fa sı che non sia possibile utilizzare un linguaggionaturale come la lingua italiana o quella inglese, ma che sia necessario utilizzare unlinguaggio molto piu semplice.

In particolare ogni istruzione SAS viene terminata dal simbolo di punto e virgola;, con l’eccezione dei commenti.

Page 12: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

12 I fondamenti

I commenti sono l’istruzione piu importante di ogni linguaggio di programmazione.Non e uno scherzo: un programma che non sia adeguatamente commentato diventaincomprensibile anche per l’autore, a maggior ragione per chi debba modificare unprogramma scritto da altri.

Un commento inizia con la coppia di simboli /* e termina con la coppia di simboli*/. Un esempio di commento e presente nel Programma 2.1.

Programma 2.1: Esempio di commento

1 /*

2 * Questo e un commento valido

3 *

4 */

2.6 il dataset

Come gia detto in precedenza SAS e stato studiato per effettuare analisi statistiche didati, ma non abbiamo ancora detto che cosa intendiamo per dato.

Definizione 2.6.1 (Dato). Un dato e un’unita atomica di informazione.

Un numero telefonico, oppure un nome sono esempi di dati. Secondo la definizioneche abbiamo appena introdotto i dati in un insieme potrebbero apparire completamen-te scorrelati fra loro, tuttavia questo insieme di dati potrebbe contenere informazioninon visibili immediatamente. Questo fatto, insieme con la vastita dei dati usualmentedisponibile, comportano la necessita di affrontare un’analisi statistica dei dati con ade-guati strumenti computazionali. Lo strumento computazionale che tratteremo sara,come e immaginabile, SAS.

Affinche i dati siano trattabili con SAS essidevono essere memorizzati in un for-mato predeterminato: quello tabellare, dove ogni colonna e una categoria diversa. InFigura 2.6 si trovano alcuni dati demografici riguardanti le regioni italiane.

Come si puo notare i dati sono organizzati secondo una struttura rigida: ognicolonna corrisponde ad una categoria o variabile, per cui le colonne contengono datiomogenei. Analogamente ogni riga consiste in una osservazione, ovvero tutti i dati cheriguardano una unita analizzata. In questo caso specifico ogni osservazione corrispondead una regione.

Definizione 2.6.2 (Dataset). Una tabella con dati organizzati su colonne (variabili)e righe (osservazioni) viene detta dataset .

E di fondamen-tale importanzanotare che SASopera sempre sudataset

Quando SAS esegue delle operazioni su un dataset, tale dataset viene visitato (edi dati ivi contenuti vengono utilizzati) in un ordine ben preciso, ovvero:

1. una osservazione alla volta, iniziando dalla prima e terminando con l’ultima (“rigadopo riga”);

Page 13: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.7 Relazione fra dataset e filesystem 13

Variabile 1 Variabile 2 Variabile 3↓ ↓ ↓

Regione Abitanti SuperficieOsservazione 1 → Piemonte 4290412 25399Osservazione 2 → Valle d’Aosta 115397 3262Osservazione 3 → Liguria 1668078 5416Osservazione 4 → Lombardia 8831264 23856Osservazione 5 → Trentino Alto Adige 886914 13618Osservazione 6 → Veneto 4363157 18364Osservazione 7 → Friuli Venezia Giulia 1193520 7846Osservazione 8 → Emilia-Romagna 3899170 22123Osservazione 9 → Toscana 3510114 22992Osservazione 10 → Marche 1427666 9693Osservazione 11 → Umbria 804054 8456Osservazione 12 → Lazio 5031230 17203Osservazione 13 → Abruzzo 1243690 10794Osservazione 14 → Molise 327893 4438Osservazione 15 → Campania 5589587 13595Osservazione 16 → Puglia 3986430 19347Osservazione 17 → Basilicata 605940 9992Osservazione 18 → Calabria 2037686 15080Osservazione 19 → Sicilia 4961383 25708Osservazione 20 → Sardegna 1637705 24090

Figura 2.4: Esempio di dataset: popolazione e superficie delle regioni italiane

2. ogni osservazione viene letta una variabile alla volta, iniziando dalla prima eterminando con l’ultima (ogni osservazione viene letta “da sinistra a destra”).

Talvolta e molto utile sfruttare il fatto che ogni dataset viene visitato in questoordine.

2.7 relazione fra dataset e filesystem

Nella sezione precedente e stato evidenziato come i dati in SAS siano organizzati lo-gicamente sotto forma di dataset, ma non e stato specificato come tali dataset sianomemorizzati. Una prima osservazione e che non e ragionevole pensare che un data-set sia sempre presente interamente in memoria centrale (RAM), in quanto SAS vieneutilizzato in ambienti industriali dove i dataset analizzati possono avere milioni di os-servazioni per alcune decine di variabili, ad esempio si consideri un dataset contenentitutti i dati di vendita di un supermercato.

Pertanto diventa necessario salvare i dataset su disco (o altra unita di memorizza-zione adatta) e questo e uno dei compiti che il sistema SAS svolge automaticamente apatto che venga specificato il nome con cui salvare il dataset (come specificare il nomesara spiegato piu avanti). Ogni dataset viene salvato in un formato proprietario diSAS, tipicamente in un file con estensione .SD2, che non puo essere ispezionato ma-nualmente. Conseguentemente un problema e quello di interfacciarsi con fonti di dati

Page 14: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

14 I fondamenti

preesistenti che tipicamente consistono in file testuali opportunamente formattati, chepossono avere una qualunque estensione.

Bisogna pertanto fare attenzione e distinguere il concetto di dataset, che e internoa SAS, dal concetto di dataset salvato su file (che a sua volta e un concetto tipicodi SAS) dal file che contiene dati trasformabili in un dataset. Quest’ultimo concettonon e esclusivo di SAS: infatti spesso tali dati vengono generati o elaborati da altreapplicazioni (nel caso di dati di un supermercato vengono generati dal programma digestione del magazzino).

2.8 sas come linguaggio di programmazione

Nella sezione precedente abbiamo introdotto il concetto di dataset, ma non abbiamoancora detto come gestire tale dataset. In effetti SAS dispone di un linguaggio diprogrammazione (che chiameremo linguaggio SAS disegnato specificatamente per iltrattamento di dataset. I costrutti del linguaggio SAS possono essere divisi in due(sotto-)linguaggi:

• linguaggio per la manipolazione dei dati;

• linguaggio per la estrazione di informazione dai dati.

Il primo linguaggio comprendera quindi tutte le istruzioni necessarie per creare, sal-vare e caricare un dataset, mentre il secondo linguaggio contiene le istruzioni necessarie,ad esempio, a calcolare la media dei valori contenuti in una variabile del dataset.

2.9 le librerie

I dataset sono organizzati in librerie, che e un insieme di dataset. Normalmente edesiderabile potere salvare (e successivamente riutilizzare) i dataset su cui si sono effet-tuate alcune elaborazioni, anche se cio non e vero per tutti i dataset. Per facilitare taledistinzione esiste una libreria particolare: la libreria WORK. Ogni dataset nella libreriaWORK viene considerato temporaneo e quindi non viene salvato. I dataset temporaneivengono contrapposti a quelli permanenti , che sono quelli che appartengono ad unalibreria diversa da WORK: i dataset permanenti vengono automaticamente salvati dopoogni operazione.

Una operazione fondamentale, spesso la prima di ogni programma, e quindi la sceltadella libreria che viene utilizzata: tale operazione prende il nome di libref , e si realizzatramite la LIBNAME come riportato nel programma 2.2.

Programma 2.2: Esempio di libref

1 LIBNAME libreria ’c:\Desktop’

Il comando LIBNAME richiede due argomenti: il primo e il nome che si desideraassociare alla libreria, il secondo e la locazione nel filesystem della libreria. Quest’ultimae una delle rare occasioni in cui un programma SAS e dipendente dal sistema operativosu cui deve essere eseguito.

Page 15: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.10 Operazioni fondamentali su dataset 15

Osservazione: Anche se e possibile scrivere un’espressione che effettui lastessa operazione su diversi sistemi operativi, trattare tale espressione efuori dallo scopo di questo libro.

2.10 operazioni fondamentali su dataset

Le componenti di un programma SAS possono essere suddivise in due categorie:

• I data step, dove il dataset viene costruito o modificato. I data step consistonodi tutte le operazioni di modifica dei dati.

• I proc step, costituiscono le istruzioni dove i dati vengono analizzati e dove lestatistiche richieste vengono calcolate.

In questa sezione ci dedicheremo alla descrizione dei data step. Come si puo imma-ginare ogni data step inizia con la istruzione DATA, dove l’unico parametro e il nome deldataset su cui si va ad operare. Il programma 2.3 legge un dataset chiamato regioni,appartenente alla libreria libro che a sua volta si trova nella directory c:\Desktop.Utilizzeremo questa libreria per tutti gli esempi in questo libro. L’istruzione DATA fa sıche il dataset su cui agire sia regioni2, mentre la successiva SET impone che regioni

sia il dataset che fornisce i dati su cui lavorare (ma tale dataset viene soltanto let-to, non si effettua nessuna operazione su regioni). L’istruzione RUN termina il datastep e serve ad evitare eventuali ambiguita sulla suddivisione fra le varie sezioni delprogramma.

Una nota esplicativa si rende necessaria: SAS e un linguaggio interpretato, ovveroal momento dell’esecuzione il sistema SAS si occupa di eseguire ogni singola istruzionedel programma. Il sistema interpreta una RUN come la fine della procedura che staattualmente leggendo, per passare alla fase di esecuzione vera e propria. Non e neces-sario scrivere una RUN qualora la fine di una procedura non sia ambigua, ovvero quandola fine di una procedura sia immediatamente seguita dall’inizio di un’altra procedura.Comunque la presenza di RUN permette di separare meglio le diverse componenti delprogramma e quindi e consigliabile utilizzarla sempre.

Programma 2.3: Copiare un dataset

1 /*

2 * Copia regioni -> regioni2

3 */

4 libname libro ’c:\Desktop’;5 data libro.regioni2;

6 set libro.regioni;

7 run;

La prima operazione su un dataset e chiaramente la sua creazione. Poiche undataset e un oggetto che gode di vita propria diventa fondamentale decidere un nomeper tale dataset. La scelta del nome per una libreria, cosı come per un dataset, deve

Page 16: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

16 I fondamenti

essere ispirata da criteri di semplicita e chiarezza: in altre parole e preferibile utilizzarenomi brevi ma esplicativi e non ambigui. Seguendo queste indicazioni libro e regionisono scelte adeguate, mentre regioni2 o nomelungoesenzasenso sono opinabili.

In realta la SET puo indicare piu dataset (ma tutti con la stessa struttura): in talcaso l’operazione che si effettua e la fusione dei dataset, in quanto vengono copiatetutte le osservazioni presenti nei dataset di ingresso.

2.11 creare un dataset

Non sempre e possibile lavorare su dati preesistenti, ma e necesario creare da zero ildataset. In questo caso le operazioni di cui dobbiamo occuparci sono:

• scegliere la libreria di cui il dataset dovra fare parte, e quindi individuare lalocazione fisica del dataset

• scegliere il nome del dataset

Una volta effettuate queste due operazioni sara SAS ad occuparsi di salvare i daticontenuti nel dataset quando necessario (ad esempio al termine dell’esecuzione delprogramma).

Il problema successivo da risolvere e quello della memorizzazione di dati nel da-taset. Chiaramente il dataset appena creato non contiene dati (come potrebbe esserealtrimenti? Abbiamo soltanto specificato la libreria ed il nome del dataset.) pertantodiventa fondamentale avere un insieme di comandi che permettano l’inserimento didati.

In particolare due aspetti riguardanti i dati che dovranno essere rappresentati daldataset devono essere trattati: la strutturazione del dataset in variabili e l’elenco delleosservazioni. L’elenco delle variabili, e il tipo di ogni variabile viene definito tramitela INPUT. Tale istruzione richiede come argomenti l’elenco dei nomi delle variabili,eventualmente seguite dal simbolo $ nel caso si tratti di variabili che devono conteneredati alfanumerici. Si presume quindi che una variabile sia destinata a memorizzare datinumerici, e si deve esplicitare quando questa assunzione non sia vera.

L’elenco delle osservazioni viene determinato utilizzando l’apposita istruzione DATALINESa cui deve seguire l’elenco delle osservazioni, con ogni osservazione su una riga a se stan-te. L’elenco delle osservazioni deve terminare con un punto e virgola. Ad esempio unprogramma per construire un dataset contenente nome. cognome, altezza e peso perun insieme di persone e presentato nel seguente programma.

Siamo ora pronti per vedere un semplice problema che utilizzi le nozioni appenaintrodotte.

Problema 1: inizializzazione. Scrivere un programma SAS che crei un datasetequivalente a quello rappresentato in Tabella 2.6.

Il programma in grado di risolvere il problema sara chiaramente molto simile aquello descritto in precedenza.

2.12 leggere e salvare un dataset

L’esercizio svolto nella Sez. 2.11 ci permette alcune puntualizzazioni: i nomi di varia-bili non possono assolutamente essere scelti a caso, e diventa importante usare nomidescrittivi. Tale possibilita e stata facilitata nelle versioni recenti di SAS, portando la

Page 17: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.12 Leggere e salvare un dataset 17

Programma 2.4: Definizione e inizializzazione di un dataset

1 libname libro ’c:\Desktop’;2 data libro.persone;

3 input nome $ cognome $ altezza peso;

4 datalines;

5 mario rossi 180 75

6 elena bianchi 168 55

7 ;

8 run;

Programma 2.5: Dataset regioni: inizializzazione

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 input regione $ abitanti superfic;

4 datalines;

5 Piemonte 4290412 25399

6 Valle d’Aosta 115397 3262

7 Liguria 1668078 5416

8 Lombardia 8831264 23856

9 Trentino Alto Adige 886914 13618

10 Veneto 4363157 18364

11 Friuli Venezia Giulia 1193520 7846

12 Emilia-Romagna 3899170 22123

13 Toscana 3510114 22992

14 Marche 1427666 9693

15 Umbria 804054 8456

16 Lazio 5031230 17203

17 Abruzzo 1243690 10794

18 Molise 327893 4438

19 Campania 5589587 13595

20 Puglia 3986430 19347

21 Basilicata 605940 9992

22 Calabria 2037686 15080

23 Sicilia 4961383 25708

24 Sardegna 1637705 24090

25 ;

26 run;

lunghezza massima di un nome di variabile da 8 a 32 caratteri quindi superficie nonera un nome valido per una variabile).

I limiti della procedura presentata sono due: il formato e fissato a priori (dati se-

Page 18: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

18 I fondamenti

parati da spazi) ed i dati sono memorizzati nel programma, invece che su disco fisso.Quest’ultimo e un problema particolarmente significativo, poiche i dati da gestire posso-no facilmente occupare troppo spazio perche sia possibile memorizzarli nel programma(basti pensare ai dati storici di movimentazioni di conti correnti in un’agenzia banca-ria). A tal fine e possibile utilizzare l’istruzione INFILE che richiede come argomento ilfile che contiene i dati da analizzare. Un formato particolarmente utilizzato per la me-morizzazione e lo scambio di dati e il cosiddetto CSV (Comma-separated values) dove idati vengono separati da virgole anziche da spazi. Praticamente tutti i programmi perla gestione di fogli di calcolo possono esportare ed importare dati in questo formato,cio lo rende un minimo comun denominatore per trattare dati indipendentemente dallapiattaforma software utilizzata.

Ovvero si posso-no usare sia Ex-cel che OpenOf-fice (o StarOf-fice) su diversisistemi operativi

In realta SAS fornisce un metodo che permette di utilizzare dati divisi da un ca-rattere speciale, tramite la parola chiave DLM. Decidendo quale simbolo (compreso fraapici) debba delimitare i dati siamo in grado di leggere i dati in una vasto insieme diformati.

Problema 2: Lettura formato CSV. Si legga il dataset delle regioni italiane dalfile ’c:\Desktop\regioni’ nel formato CSV

Programma 2.6: Dataset regioni: lettura formato CSV

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 infile ’c:\Desktop\regioni’ dlm=’,’;

4 input regione $ abitanti superfic;

5 run;

Una nuova opzione per la INFILE e MISSOVER. Questa opzione assume che i datiin ingresso siano sempre una osservazione per riga, nel caso in cui i dati su una riganon siano sufficienti per assegnare un valore ad ogni variabile, allora si assume che idati che non sono presenti siano mancanti. Questa opzione e utile quando siamo in

Senza questa op-zione i dati sa-rebbero stati cer-cati nella rigasuccessiva

presenza di dati con non sono sempre con la stessa identica struttura, ma al tempostesso non sono completamente privi di struttura. Un esempio lo si puo vedere con ilProblema 19 a pagina 51.

Salvare un dataset in un file specificato e analogo a leggere lo stesso dataset: sitratta di specificare, tramite l’istruzione FILE il nome del file su cui scrivere, oppurespecificare il nome della libreria di cui il dataset e parte.

Problema 3: salvataggio in libreria. Si legga il dataset delle regioni italiane dalfile ’c:\Desktop\regioni’ nel formato CSV e lo si memorizzi nel dataset “regionifinte”

Problema 4: salvataggio in libreria. Si legga il dataset delle regioni italiane dalfile ’c:\Desktop\regioni’ nel formato CSV e lo si memorizzi nel file “a:regionifinte”.

2.13 esportare un dataset

Normalmente i dataset SAS vengono salvati in un formato riservato che permette dimassimizzare la velocita di accesso ai dati. Uno svantaggio di tale formato consiste nel

Page 19: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.13 Esportare un dataset 19

Programma 2.7: Dataset regioni: salvataggio in libreria

1 libname libro ’c:\Desktop’;2 data libro.regionifinte;

3 set libro.regioni;

4 infile ’c:\Desktop\regioni’ dlm=’,’;

5 input regione abitanti superfic;

6 run;

Programma 2.8: Dataset regioni: salvataggio in libreria

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 file ’a:libro.regionifinte’;

4 infile ’c:\Desktop\regioni’ dlm=’,’;

5 input regione abitanti superfic;

6 run;

fatto che esso non e portabile su calcolatori diversi (o meglio, potrebbero esserci pro-blemi se si cambia sistema operativo). Per avere un dataset in un formato indipendentedal sistema utilizzato e necessario esportare il dataset in formato ASCII.

Le istruzioni per esportare un dataset sono speculari a quelle per importare: il filesu cui salvare viene specificato con l’istruzione FILE, mentre l’elenco delle variabili daesportare, insieme con le opzioni che specificano il formato, vnegono specificate conl’istruzione PUT.

Problema 5: salvataggio in libreria. Si legga il dataset delle regioni italianedal file ’c:\Desktop\regioni’ nel formato CSV e lo si memorizzi, in formato ASCII concampi separati da spazi, nel file “a:regionifinte.txt”.

Programma 2.9: Dataset regioni: salvataggio in libreria

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 infile ’c:\Desktop\regioni’ dlm=’,’;

4 file ’a:libro.regionifinte.txt’;

5 input regione abitanti superfic;

6 put regione abitanti superfic;

7 run;

Page 20: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

20 I fondamenti

2.14 creare e cancellare variabili

Finora abbiamo visto come creare un dataset, come leggere e scrivere i dati ivi conte-nuti, ma non abbiamo ancora visto come sia possibile modificare i dati, possibilmenterendendo esplicita dell’informazione gia presente nel dataset. Uno dei modi piu sem-plici per ottenere questo risultato consiste nella creazione di una nuova variabile, il cuicontenuto e ottenibile direttamente dal dataset originario. In SAS cio corrisponde ad“assegnare” alla nuova variabile un operazione i cui argomenti sono altre variabili deldataset. A partire da questa sezione sfrutteremo una delle caratteristiche fondamen-tali dei data step: tutte le operazioni comprese in un data step vengono eseguite per

ogni osservazione. Il seguente problema esemplifica la situazione, dove la riga 5 vieneeseguita per ogni osservazione.

Problema 6: calcolo densita abitativa. Dato il dataset delle regioni italiane,si aggiunga una variabile densita che memorizza il numero di abitanti per kilometroquadrato.

Programma 2.10: Dataset regioni: calcolo densita abitativa

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 set libro.regionicomplete;

4 densita=abitanti/superfic;

5 run;

La riga 5 e quella importante: il simbolo = suddivide il nome della nuova variabile(a sinistra) dall’operazione che descrive come ottenere i dati da associare alla nuovavariabile (dopo l’uguale).

Analogamente e possibile rimuovere una variabile da un dataset, tramite l’operazio-ne DROP che deve essere seguita dalla variabile (o dall’insieme di variabili) da cancellare.Tale istruzione deve apparire all’interno di un DATA step. Un’istruzione che puo essereutilizzata in alternativa alla DROP e KEEP: in questo caso solo le variabili indicate dopoKEEP vengono tenute nel dataset, mentre tutte le altre vengono eliminate.

2.15 visualizzare un dataset

Nelle sezioni precedente e stato mostrato come memorizzare dati in un dataset, oltread alcune operazioni sugli stessi. Non abbiamo ancora visto come visualizzare il con-tenuto di un dataset, anche solo al fine di controllare se i programmi scritti siano ineffetti corretti, ovvero se il dataset che abbiamo appena letto sia effettivamente cor-rispondente con quello che ci aspettiamo. Siccome non si tratta di un’operazione digestione dati come quelle viste finora, ma di un’operazione di estrazione informazio-ni, verra implementata tramite un PROC. In particolare la procedura da invocare e laCONTENTS. L’invocazione della PROC CONTENTS permette di dichiarare alcune opzioni:in particolare l’opzione DATA specifica il dataset che deve essere visualizzato.

Page 21: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.16 Variabili indicizzate 21

Problema 7: stampa contenuto. Dato il dataset delle regioni italiane, si aggiungauna variabile densita che memorizza il numero di abitanti per kilometro quadrato e sicontrolli la correttezza del nuovo dataset.

Programma 2.11: Dataset regioni: contents

1 libname libro ’c:\Desktop’;2 data regionic;

3 set libro.regioni;

4 densita=abitanti/superfic;

5 run;

6 proc contents data=regionic;

7 run;

Il risultato di PROC CONTENTS non consiste pero nel contenuto del dataset, ma inun elenco di utili informazioni (fra cui il numero di osservazioni e di variabili) che cipermettono di capire se il dataset sia stato caricato correttamente.

Se invece il risultato che si vuole ottenere e la stampa del contenuto del dataset laprocedura da invocare e la PROC PRINT, come si puo vedere nel Prog. 2.12.

Programma 2.12: Dataset regioni: stampa contenuto

1 libname libro ’c:\Desktop’;2 data regionic;

3 set libro.regioni;

4 densita=abitanti/superfic;

5 run;

6 proc print data=regionic;

7 run;

2.16 variabili indicizzate

E abbastanza frequente il caso di dovere gestire un dataset in cui alcune variabilicontengono dati fortemente correlati fra loro. Come esempio gestiremo un registro deltipo utilizzato nelle scuole superiori, in cui vogliamo memorizzare le assenze ed i votiottenuti.

Problema 8: Registro scolastico. Si gestisca un dataset per un registro scola-stico, in cui le variabili sono nome e cognome dello studente, presenza o assenza perogni lezione (in totale 100 lezioni), e voti ottenuti (in totale 5 voti).

In riferimento al Problema 8 diventa utile raggruppare le variabili per le presenze inquanto rappresentano informazioni analoghe. A tal fine esiste una sintassi particolare

Page 22: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

22 I fondamenti

al momento della definizione delle variabili che ci permette di definire 100 variabilii cui nomi sono registro1, registro2, . . . , registro100: si utilizza la scritturaregistro1-registro100.

Adesso siamo in grado di risolvere il problema. In realta nella sezione 3.2 compren-deremo come la risoluzione reale del problema preveda alcune complicazioni ulteriori.In ogni caso il programma che segue permette di leggere i dati in ingresso.

Programma 2.13: Registro scolastico: inserimento dati

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome $ cognome $ (presenze1-presenze100) ($) voti1-voti5;

5 */

6 proc contents data=libro.registro;

7 run;

Notare che, nel Prog. 2.13, le variabili presenze1-presenze100 sono state rag-gruppate fra parentesi tonde al fine di assegnare a tutte lo stesso tipo (alfanumerico).Conseguentemente anche il simbolo $ e stato posto fra parentesi tonde.

2.17 estrarre osservazioni da un dataset

Una operazione complementare alla creazione di osservazioni e l’estrazione di osser-vazioni. Cio consiste in una copia selettiva del dataset, ovvero si selezionano qualiosservazione debbano essere copiate, chiaramente tramite una sequenza di DATA STEP.Ad esempio esplicitiamo nel Prog. 2.14 la distinzione effettuata nel Prog. 3.6 creandodue dataset. Si noti che ogni costante non numerica debba essere compresa fra apici.

La IF e una istruzione condizionale che, in questo caso, non presenta esplicitamentel’istruzione da eseguire se la condizione e vera oppure falsa. In questo caso si assumeche se la condizione e falsa allora non si esegue nessuna istruzione, altrimenti si assegnal’osservazione al dataset specificata all’inizio del DATA step. Pertanto il risultato delProg. 2.14 e la creazione di due dataset temporanei contenenti i dati distinti per sesso.

Il valore di una variabile viene confrontato con una costante (oppure un’altravariabile) tramite gli operatori in Tabella 2.2.

2.18 istruzioni condizionali

Come spiegato nella Sez. 2.17 la IF permette di eseguire alcune istruzioni solo se unadeterminata condizione sia verificata. Tale istruzione e possibile solo in un data step,e la sua forma completa e IF condizione THEN istruzione1 ELSE istruzione2, dove istru-zione1 viene eseguita se e solo se la condizione e vera, mentre la istruzione2 vieneeseguita se e solo se la condizione e falsa. Sia il blocco ELSE istruzione2 che quelloTHEN istruzione 1 possono essere omessi: nel primo caso e equivalente a ELSE “non fare

Page 23: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

2.18 Istruzioni condizionali 23

Programma 2.14: Dataset registro: partizionamento IF

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome cognome mf presenze1-presenze10 voti1-voti5;

5 */

6 data maschi;

7 set libro.registro;

8 if mf eq ’m’;

9 run;

10 data femmine;

11 set libro.registro;

12 if mf eq ’f’;

13 run;

Operatore Significato

EQ UgualeLT MinoreLE Minore o ugualeGT MaggioreGE Maggiore o ugualeNE Diverso

Tabella 2.2: Operatori di confronto

nulla”, nel secondo e equivalente a THEN “azione di default”, che normalmente consistenell’inserire l’osservazione nel dataset.

E da notare che sia istruzione1 che istruzione2 devono essere un’unica istruzione.Cio nonostante talvolta e utile potere eseguire piu istruzioni se la condizione e vera: intal caso la sequenza di istruzioni devono essere comprese fra le parole riservate DO; eEND:.

Page 24: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze
Page 25: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Ancora operazioni su dataset

3.1 introduzione

Le operazioni che abbiamo visto finora permettono una gestione basilare di un dataset:tuttavia un uso reale di SAS necessita di una conoscenza piu approfondita di talistrumenti, in particolare di quelli che permetto l’inserimento e la visualizzazione deidati.

Successivamente si passera al calcolo delle principali statistiche riguardanti undataset, per poi passare alla manipolazione di un dataset.

Finalmente si ca-pisce a cosa ser-ve SAS

3.2 inserire i dati

In precedenza abbiamo trattato degli inserimenti semplici: i dati erano sempre perfetta-mente strutturati. Quando abbiamo introdotto il Problema 8 non abbiamo consideratoi seguenti casi:

• un registro contiene annotazione solo delle assenze;

• non tutti gli studenti hanno esattamente 5 voti.

Entrambi i punti appena evidenziati nascono dal problema dei dati mancanti , ov-vero che il dataset possa contenere delle “caselle” vuote, e che il fatto che un datomanchi ha un significato ben preciso (non mi sembra ragionevole che uno zero comevoto sia uguale a non essere presenti il giorno del compito in classe). Vista l’importanzadi tale concetto SAS fornisce un modo semplice per identificare un dato mancate: seil dato atteso era numerico lo si sostituisce con un punto “.”, altrimenti (nel caso didati alfanumerici) viene sostituito con uno spazio. Assumendo pertanto che si segnalacon la lettera “a” un’assenza il seguente programma permette di inserire un sempliceregistro (con solo 10 giorni per non appesantire il programma).

Programma 3.1: Dataset registro: inizializzazione

1 libname libro ’c:\Desktop’;2 data libro.registro;

3 infile ’c:\Desktop\registro’ dlm=’,’;

4 input nome $ cognome $ (presenze1-presenze10) ($) voti1-presenze5;

5 run;

Dove il file c:\Desktop\registro e del tipo:

1 Mario,Rossi,,,,,,a,a,,,,3,2,1,.,3

2 Luisa,Bianchi,,,,,,,,,,,5,4,5,5,4

Page 26: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

26 Ancora operazioni su dataset

Problema 9: DATALINES. Era possibile inserire i dati del registro in un programmaSAS con l’istruzione DATALINES?

In generale il dato mancante viene identificato sempre con un punto, eventualmenteracchiuso tra apici se si tratta di dato alfanumerico. Tale rappresentazione torna utilequando si vuole gestire esplicitamente il dato mancante.

Un metodo alternativo per leggere i dati e il cosiddetto modo per colonne: ovveroper ogni variabile si specifica quanti caratteri debbano occupare i dati ivi contenuti.Supponiamo di riservare 20 caratteri per nome e cognome: adesso possiamo inizializzareil dataset con il seguente programma:

Programma 3.2: Dataset registro: inizializzazione su colonne

1 libname libro ’c:\Desktop’;2 data libro.registro;

3 input nome $ 1-20 cognome $ 21-40 presenze1-presenze10 $ 41-50

4 voti1-voti5 51-55;

5 datalines;

6 Mario Rossi a a 321 3

7 Luisa Bianchi 54554

8 ;

9 run;

Quando si utilizza il formato colonnare, nel log viene presentato un righello chepermette di controllare con facilita se ci sono stati errori nella definizione del formatodei dati in ingresso.

Un metodo piu generale e flessibile e quello dell’informat : ovvero si specifica espli-citamente il formato dei dati riferiti ad ogni variabile. Il nostro programma diventapertanto il seguente:

Programma 3.3: Dataset registro: inizializzazione con informat

1 libname libro ’c:\Desktop’;2 data libro.registro;

3 informat nome $20. cognome $20.;

4 informat (presenze1-presenze10 voti1-voti5) 1;

5 input nome cognome presenze1-presenze10 voti1-voti5;

6 datalines;

7 Mario Rossi a a 321 3

8 Luisa Bianchi 54554

9 ;

10 run;

Page 27: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

3.3 Array 27

In questo caso i formati sono definiti con l’istruzione INFORMAT dove ogni variabileviene seguita dal formato, ovvero viene specificato se il dato sia numerico o alfanumericoed il numero massimo di caratteri. Un punto segue il numero di caratteri se uno spazio(o un altro simbolo di separazione) separa i dati anche se non sono stati utilizzati tuttii caratteri a disposizione. Si noti inoltre come le parentesi possono raggruppare insiemidi variabili a cui associare lo stesso formato.

Sia il modo colonnare che quello degli informat permettono di definire con precisioneil formato dei dati da ricevere in ingresso, senza caratteri di separazione che potrebberoessere ambigui. Inoltre il problema dei dati mancanti viene risolto nella maniera piuintuitiva possibile: non inserendo il dato!

Una tipologia particolare di dati e quella composta dalle date, che vengono rappre-sentate internamente in un formato numerico, e per cui sono disponibili vari formatidi lettura o scrittura. In particolare i formati piu utilizzati sono:

• DATE7. consiste nel formato di 2 cifre per il giorno, 3 lettere per il mese e 2 cifreper l’anno, ad esempio 10Apr02.

• DATE9. consiste nel formato di 2 cifre per il giorno, 3 lettere per il mese e 4 cifreper l’anno, ad esempio 10Apr2002.

• DDMMYY. consiste nel formato di 2 cifre per il giorno, 2 cifre per il mese e 2 cifreper l’anno, ad esempio 100402.

• DDMMYYYY. consiste nel formato di 2 cifre per il giorno, 4 cifre per il mese e 4 cifreper l’anno, ad esempio 10042002.

Il formato deve essere sempre specificato dopo il nome della variabile a cui si rife-risce, in maniera analoga a quanto fatto con il simbolo $ per specificare che il formatodi una variabile e alfanumerico.

3.3 array

Alcune nuove variabili sono calcolabili solo attraverso un insieme di operazioni sullevariabili inizialmente previste nel dataset, come ad esempio avevamo gia visto percalcolare la densita di ogni regione.

In alcuni casi le operazioni per calcolare i valori da assegnare ad una variabile sonopiu complesse quali, ad esempio, operazioni semplici su un insieme vasto di variabili.Si consideri il seguente problema sul dataset riguardante il registro scolastico:

Problema 10: Numero assenze. Stampare il numero di totale di assenze di ognialunno.

La particolarita del Problema 10 consiste nel fatto che l’informazione che interessapuo essere ottenuta solo analizzando un insieme potenzialmente vasto di variabili nellastessa osservazione. Pertanto scrivere esplicitamente l’espressione aritmetica non epratico, sebbene sia possibile.

Quanto tempo civuole per scrive-re tutte e 100 levariabili coinvol-te?

Per riuscire a risolvere in maniera soddisfacente il problema sono necessari alcuninuovi concetti, il primo dei quali e quello di array.

Definizione 3.3.1 (Array). Un array e una sequenza di variabili, dove ogni variabilee accessibile tramite un indice.

Page 28: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

28 Ancora operazioni su dataset

Una coppia <nome di variabile, valore di un indice> e l’unico modo per accedere allasingola variabile. Ad esempio in Fig. 3.1 si trova raffigurato un array voti compostoda 5 elementi.

voti[1] voti[2] voti[3] voti[4] voti[5]

Figura 3.1: Array voti

Chiaramente un array ha senso solo per raggruppare variabili destinate a conteneredati omologhi, in quanto associare significati diversi a valori diversi di un indice por-terebbe ben presto a confusione. Pero voti[1] non e un nome di variabile, in quantocontiene dei caratteri che non sono lettere o cifre, pertanto viene fornita una corri-spondenza biunivoca fra l’elemento dell’array voti[i] e la variabile votii e quindi,nell’esempio specifico, l’elemento dell’array voti[1] corrisponde alla variabile voti1.In Fig. 3.2 il nome con cui e possibile accedere ad un elemento dell’array viene mostratosopra l’elemento stesso, all’interno viene mostrato il contenuto dell’elemento.

voti[1] voti[2] voti[3] voti[4] voti[5]

voti1 voti2 voti3 voti4 voti5

Figura 3.2: Array voti e variabili associate

In breve perche introdurre il concetto di array? Perche permette di trattare variabiliomogenee cambiando solo un emph, portando ad una trattazione piu compatta dialcune operazioni sui dataset. Per il momento si puo pensare che la variabile voti1 siaassolutamente equivalente all’elemento voti[1].

In effetti tale equivalenza puo essere resa esplicita nel programma al momentodella creazione, tramite l’istruzione ARRAY registro[100]: la parola riservata ARRAY

introduce la definizione dell’array, la cui dimensione (ovvero il numero di elementicontenuti nell’array) viene indicato fra parentesi quadre. Per utilizzare anche i voti cisono due possibilita: introdurre un secondo array oppure modificare la dichiarazioneprecedente in modo che l’array contenga 105 elementi (ma questa seconda possibilitaviene sconsigliata). Inoltre l’istruzione ARRAY prevede la possibilita di un argomentoopzionale che (eventualmente) deve essere scritto dopo la dimensione dell’array: taleargomento consiste nelle variabili che verranno identificate con gli elementi dell’array(nel Prog. 3.4 tale possibilita viene utilizzata per l’array vot).

Ora si tratta di calcolare il numero totale di assenze che e uguale a∑

100

i=1voti[i].

Tale espressione puo essere calcolato tramite l’Algoritmo 3.1.

Non dovrebbe essere difficile convincersi che il risultato dell’Algoritmo 3.1 sia esat-tamente

∑100

i=1voti[i]. Aggiungere voti[i] a totale viene fatto con la semplice

istruzione totale+voti[i], il resto viene realizzato tramite il ciclo DO. . . TO. . . END. Intale istruzione si individuano tre parametri:

Page 29: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

3.4 Ordinare un dataset 29

Algoritmo 3.1: Ciclo for

1. totale ← 0

2. i ← 1

3. Aggiungi voti[i] a totale

4. Aggiungi 1 a i

5. Se i≤100 torna al punto 2

• Un assegnamento (fra DO e TO) di un valore iniziale, tale assegnamento e la primaistruzione a venire eseguita. La variabile soggetta all’assegnamento assume ilruolo di contatore.

• Un valore finale, il corpo del ciclo viene eseguito se il contatore e compreso fra ilvalore iniziale e quello finale (estremi compresi).

• Un corpo del ciclo, consiste delle istruzioni da ripetere.

Nel nostro caso diventa necessario creare una nuova variabile per mantenere il nume-ro totale di assenze: al momento della creazione tale variabile viene automaticamenteinizializzata a 0. E necessario sfruttare una caratteristica gia introdotta in precedenzadei DATA step: quando si specifica la sorgente di un dataset (tramite la SET) tuttoquello che segue viene eseguito una volta per ogni osservazione. La conseguenza e chee necessario porre a zero la variabile che deve contenere il numore di assenze, in talmodo si memorizzano le assenze di ogni studente.

Una osservazione diventa fondamentale: ogni modifica apportata al dataset e persi-stente, ovvero continua ad avere effetto per tutta la durata dell’esecuzione del sistemaSAS.

Problema 11: Uso dei contatori. Cosa sarebbe successo se non ci fosse l’istru-zione 7 nel Prog. 3.4?

Le linee 8–10 del Prog. 3.4 sono la parte innovativa che ci permette di risolvere ilProblema 10. La riga 8 significa che per ogni valore intero di i compreso fra 1 e 10bisogna eseguire tutte le istruzioni fino alla parola chiave end. L’istruzione alla riga 9dice di incrementare di uno tassenze (che e inizializzata a zero implicitamente).

3.4 ordinare un dataset

Un’operazione fondamentale e l’ordinamento di dataset secondo i valori contenutiin una variabile. La procedura che permette di effettuare tale ordinamento e laPROC SORT. Analizzeremo come risolvere il Problema 12 come esempio.

Problema 12: stampe ordinate. Dato il dataset in Tabella 2.6, stampare il datasetdue volte: la prima volta in ordine alfabetico, la seconda volta in ordine decrescente didensita.

Page 30: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

30 Ancora operazioni su dataset

Programma 3.4: Dataset registro: evidenzazione assenze

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome $ cognome $ mf $ (prese1-prese100) ($) voti1-voti5;

5 */

6 data pres;

7 set registro;

8 tassenze=0;

9 array prese[100];

10 array vot[5] voti1-voti5;

11 do i=1 to 100;

12 if presenze[i] eq ’a’ then tassenze+1;

13 end;

14 drop voti1-voti5 prese1-prese100 i;

15 run;

16 proc print data=pres;

17 run;

Programma 3.5: Dataset regioni: stampe ordinate

1 libname libro ’c:\Desktop’;2 data regionic;

3 set libro.regioni;

4 /*

5 input regione abitanti superfic;

6 */

7 densita=abitanti/superfic;

8 run;

9

10 proc sort data=regionic;

11 by regione;

12 run;

13

14 proc sort data=regionic;

15 by descending densita;

16 run;

La clausola BY all’interno della PROC SORT specifica quale variabile utilizzare perl’ordinamento e se tale ordinamento deve essere crescente (ASCENDING) o decrescente(DESCENDING). Inoltre e possibile indicare piu variabile: in questo caso la seconda

Page 31: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

3.5 Raggruppare osservazioni in un dataset 31

variabile viene utilizzata per ordinare le osservazioni che hanno stesso valore dellaprima variabile.

3.5 raggruppare osservazioni in un dataset

Talvolta diventa importante suddividere un dataset in piu sottodataset (piu formal-mante partizionare l’insieme delle osservazioni di un dataset in classi). Ad esempio ri-prendiamo il dataset del registro scolastico, ed assumiamo di avere una nuova variabile,chiamata mf, che indica se l’osservazione si riferisce ad un alunno oppure ad un’alunna.Siamo interessati ad analizzare separatamente i ragazzi dalle ragazze, ovvero vogliamopartizionare opportunamente l’insieme delle osservazioni.

Questo obiettivo puo essere ottenuto in SAS tramite due istruzioni distinte: BY eCLASS. La piu semplice da utilizzare e CLASS che viene specificata come una clau-sola all’interno della procedura che deve utilizzare il partizionamento. Pertanto ilProgramma 3.6 calcola il numero di alunni per ogni sesso.

Programma 3.6: Dataset registro: partizionamento con CLASS

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome cognome mf presenze1-presenze10 voti1-voti5;

5 */

6 proc means data=libro.registro n;

7 title ’’Registro studenti’’;

8 class mf;

9 run;

Usare BY e lievemente piu complesso: infatti e necessario prima ordinare il datasetrispetto alla variabile in base a cui si vuole effettuare il partizionamento. La diversitafra CLASS e BY e giustificata dai diversi obiettivi che si vogliono ottenere: infatti BYsfrutta il fatto di operare su un dataset ordinato per utilizzare un algoritmo piu velocedi quello implementato nel caso della CLASS che non puo sfruttare tale proprieta ed epertanto notevolmente piu lento.

La differenza ditempo di esecu-zione e apprezza-bile solo per da-taset particolar-mente volumino-si

Un programma funzionalmente equivalente al Prog. 3.6 e il Prog. 3.7

La differenza in termini di tempo e spazio sono giustificate dai diversi algoritmiutilizzati: la BY sfrutta il fatto che il dataset e gia ordinato rispetto alla variabile diinteresse, pertanto e sufficiente leggere in sequenza le osservazioni del dataset. Nel casodella CLASS sono necessarie 2 letture e contemporaneamente mantenere una strutturadati apposita per memorizzare le posizioni delle osservazioni relative ad ogni valoredella variabile utilizzata.

Page 32: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

32 Ancora operazioni su dataset

Programma 3.7: Dataset registro: partizionamento con BY

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome cognome mf presenze1-presenze10 voti1-voti5;

5 */

6 proc sort data=libro.registro;

7 by mf;

8 run;

9 proc means data=libro.registro n;

10 title ’’Registro studenti’’;

11 by mf;

12 run;

3.6 ristrutturare dataset

Talvolta e necessario modificare radicalmente la struttura (ovvero l’insieme di variabi-li) di un dataset, questa necessita e piu probabile quando ogni osservazione contieneun numero variabile di dati. Riprendiamo pertanto il dataset del registro scolastico:siccome il numero di assenze e notevolmente minore di quello delle presenze, potremmoristrutturare la parte del dataset che codifica le assenze in modo che ogni osservazionecontenga lo studente e la data dell’assenza (pertanto ogni studente appare in tanteosservazioni quante sono le assenze). A tal fine viene introdotta l’istruzione OUTPUT, ilcui effetto e aggiungere esplicitamente una nuova osservazione in un dataset.

Programma 3.8: Esempio di commento

1 data nuovo;

2 set vecchio;

3 array presenze[10];

4 do lezione=1 to 10;

5 keep nome cognome lezione;

6 if presenze[lezione]=’a’ then output;

7 end;

8 run;

Nel caso del Prog 3.8 l’istruzione OUTPUT permette di aggiungere i dati relativialle tre variabili nome, cognome, lezione nel dataset nuovo. Si noti inoltre l’istruzioneKEEP immediatamente prima della OUTPUT che garantisce la determinazione dell’insiemedelle variabili che vengono inserite nel dataset. La sintassi completa della OUTPUT eOUTPUT OUT=dataset che corrisponde ad inserire un’osservazione nel dataset dataset,

Page 33: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

3.7 Stampare i dati 33

se la OUT viene omessa il dataset in cui viene fatto l’inserimento e quello di default:essendo all’interno di un data step l’unico dataset ragionevole e quello specificato nellaDATA. Ogni volta che si utilizza la OUTPUT bisogna tenere presente che ogni datasetcontiene sempre le stesse variabili, pertanto talvolta diventa necessario introdurre unavariabile ausiliaria che verra salvata nel nuovo dataset.

Per ogni osservazione del dataset di ingresso ogni eventuale array viene inizializza-to, ovvero ogni suo elemento viene posto uguale ad un missing value. Talvolta e invecenecessario utilizzare il valore calcolato durante l’osservazione precedente, ad esempioquando si desidera ristrutturare un dataset in modo che si generi una sola nuova os-servazione per un insieme di osservazioni del dataset originario. A tal fine si utilizzal’istruzione RETAIN dove si specifica un insieme di variabili (che sono associate ad unarray) che non devono essere inizializzati per ogni osservazione. Per una applicazionedella RETAIN si rimanda al Prob. ??.

3.7 stampare i dati

Possiamo ora dedicarci a comprendere come sia possibile visualizzare i dati contenutiin un dataset in maniera da rendere piu efficace la comunicazione con chi debba leggerel’output del programma. Questo compito viene effettuato con la PROC PRINT, al cuiinterno possono essere specificati:

• un titolo da stampare su ogni pagina di output;

• quale variabile scrivere nella prima colonna, se tale variabile non viene specificatasi utilizza una variabile fittizia OBS dove viene mostrato un numero progressivodi osservazioni;

• le variabili da visualizzare

Problema 13: ID. Stampare il registro scolastico, dove in prima colonna si trovanoi cognomi degli alunni e solo con i voti

Programma 3.9: Dataset registro: stampa

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome cognome presenze1-presenze10 voti1-voti5;

5 */

6 proc print data=libro.registro;

7 title ’’Registro studenti’’;

8 id cognome;

9 var nome voti1-voti5;

10 run;

Nel Programma 3.9 e possibile notare tre nuovi costrutti che permettono di risolvereil Problema 13:

Page 34: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

34 Ancora operazioni su dataset

• TITLE permette di stampare un titolo su ogni pagina di output. Tale titolo deveessere racchiuso fra doppi apici.

• ID permette di scegliere quale variabile debba essere sostituita a OBS

• VAR permette di specificare le variabili da stampare.

L’output del Programma 3.9 e comunque comprensibile solo dalla persona che haeffettivamente scritto il programma, in quanto le intestazioni di ogni tabella sono i nomidelle variabili utilizzate. Sarebbe molto piu utile avere delle descrizioni maggiormentedettagliate e, soprattutto, non soggiacenti alle limitazioni dei nomi di variabili (adesempio fino alla versione 6.12, SAS accettava solo nomi di variabili composti da al piu8 caratteri). In nostro aiuto arriva l’istruzione LABEL che permette di associare unadescrizione ad ogni variabile. Tale istruzione viene posta all’interno del DATA step edha un formato del tipo mostrato nel Prog. 3.10.

Programma 3.10: descrizioni colonne

1 label

2 presenze1 = "presenza giorno 12/1"

3 presenze2 = "presenza giorno 13/1";

Si noti che l’istruzione LABEL permette di identificare un insieme di etichette, cosıcome una singola DATALINES permette di identificare i dati di un insieme di osservazioni.

Il formato dei dati che si vogliono visualizzare potrebbe essere diverso da quello chesi desidera effettivamente stampare: ad esempio potremmo essere interessati a mostrarela valuta in cui un importo viene espresso, oppure limitare il numero di cifre decimali.A tal fine si utilizza la direttiva FORMAT all’interno della PROC PRINT. La FORMAT vieneseguita dalla coppia nome variabile, formato dove il formato puo essere una variazionedei seguenti esempi:

• DDMMYY6. per scrivere una data nel formato ggmmaa;

• DOLLAR8 per scrivere un importo in dollari con 8 cifre totali;

• 4 per scrivere un numero con 4 cifre totali.

3.8 riepilogo

In questa sezione vengono riassunti alcuni concetti fondamentali da ricordare per gestirecorrettamente i dati in SAS:

1. SAS gestisce dati organizzati in dataset

2. i dataset sono organizzati in librerie

3. i dataset si dividono in temporanei o permanenti

Page 35: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

3.8 Riepilogo 35

4. un file di dati puo essere importato in dataset tramite la INFILE

5. un dataset puo essere esportato in un file (esterno) tramite la INFILE

6. un dataset completo di dati (osservazioni) puo essere creato tramite la DATALINES

7. per leggere o scrivere un dataset permanente e sufficiente (e necessario) specificareunicamente la libreria a cui appartiene

8. la input specifica l’insieme delle variabili che compongono un dataset. Non deveessere utilizzata se il dataset e stato precedentemente creato.

Page 36: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze
Page 37: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Calcolare delle statistiche

Questa sezione e dedicata a quella che e la procedura piu importante di tutto SAS: laPROC MEANS. Tale procedura permette di calcolare varie statistiche sulle osservazioninel dataset.

Cosı come per gli altri casi di PROC visti in predenza immediatamente dopo laPROC MEANS si indica il dataset su cui calcolare le statistiche, questa volta seguonole statistiche che effettivamente si vogliono calcolare. Tali statistiche possono esserecalcolate per un insieme di variabili: tale insieme viene indicato, analogamente allaPROC PRINT, tramite la direttiva VAR.

Il Programma 4.1 calcola il numero di regioni nel dataset, la densita media e ladeviazione standard della densita.

Programma 4.1: Dataset regioni: statistiche sulla densita abitativa

1 libname libro ’c:\Desktop’;2 data regionic;

3 set libro.regioni;

4 /*

5 input regione abitanti superfic;

6 */

7 densita=abitanti/superfic;

8 run;

9 proc means data=regionic n mean std;

10 title "statistiche sulla densita’";

11 var densita;

12 run;

Le piu importanti statistiche che possono essere calcolare tramite la PROC MEANS

sono mostrate nella Tabella 4.1.Una utile direttiva e MAXDEC: come e facile intuire permette di fissare il numero

massimo di cifre decimali (dopo la virgola) che verranno visualizzate per ogni sta-tistica indicata. Ad esempio per avere al piu 2 cifre decimali nelle statistiche delProgramma 4.1 la riga 6 dovrebbe essere sostituita con:

proc means data=libro.regioni maxdec=2 n mean std;

4.1 estrazione di osservazioni significative

L’utilizzo di BY puo avere implicazioni estremamente importanti: ad esempio si conside-ri il Prog. 4.2, dove un dataset viene ordinato e poi copiato, specificando nell’istruzioneBY la variabile utilizzata per ordinare.

Page 38: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

38 Calcolare delle statistiche

Direttiva Significato

N il numero di osservazioniMEAN la media aritmeticaSTD la deviazione standardMAX il valore massimoMIN il valore minimoVAR la varianzaSUM la somma dei valoriSKEWNESS la skewnessKURTOSIS la curtosiNMISS il numero di osservazioni con valori mancanti

Tabella 4.1: Statistiche calcolabili in PROC MEANS

Come specificato in Sez. 3.5 la BY raggruppa le osservazioni di un dataset, dove ognigruppo consiste esattamente delle osservazioni in cui la variabile specificata assume unmedesimo valore. L’utilizzo di BY densita ha automaticamente generato due predicatiFIRST.densita e LAST.densita che vengono valutati veri rispettivamente per la primae l’ultima osservazione di ogni gruppo. Pertanto il Prog. 4.2 costruisce un datasetordinati che contiene solo la regione di minima densita.

Programma 4.2: Dataset regioni: estrazione osservazioni estreme

1 libname libro ’c:\Desktop’;2 data libro.regioni;

3 set libro.regionicomplete;

4 /*

5 input regione abitanti superfic;

6 */

7 densita=abitanti/superfic;

8 run;

9 proc sort data=libro.regioni;

10 by densita;

11 run;

12 data ordinati;

13 set libro.regioni;

14 by densita;

15 if first.densita;

16 run;

Problema 14: Analisi statistica. Si consideri il dataset in Tabella 4.2. Si scrivaun programma in grado di:

1. Leggere i dati tramite DATALINES e salvarli in un dataset permanente;

2. Calcolare la media dei passeggeri trasportati;

Page 39: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

4.2 Altre statistiche 39

Partenza Destinazione Data Numero Passeggerimilano bologna 10Mar2002 2034milano bologna 11Mar2002 2538milano bologna 12Mar2002 2212milano bologna 13Mar2002 1823bologna milano 10Mar2002 2034bologna milano 11Mar2002 2563bologna milano 12Mar2002 2418bologna milano 13Mar2002 2012

Tabella 4.2: Dataset traffico ferroviario

3. Calcolare la media dei passeggeri trasportati per ogni giorno

4.2 altre statistiche

La PROC MEANS fornisce un insieme ridotto di statistiche su un dataset: altre statistichevengono fornite dalla PROC UNIVARIATE, in ogni caso si tratta di statistiche basilari.

La sintassi e analoga a quella della PROC MEANS, un elenco delle principali funzio-nalita fornite dalla PROC UNIVARIATE e visibile nella Tabella 4.3.

Direttiva Significato

N il numero di osservazioni valideMEAN la media aritmeticaMEDIAN la medianaSTD la deviazione standardMAX il valore massimoMIN il valore miniimoVAR la varianzaSUM la somma dei valoriSKEWNESS la skewnessKURTOSIS la curtosiRANGE l’intervallo dei valori assuntiNMISS il numero di osservazioni con valori mancanti

Tabella 4.3: Statistiche calcolabili in PROC MEANS

4.3 creare un dataset con le statistiche

Un nuovo utilizzo della PROC MEANS consiste nella creazione di un dataset che contengale statistiche cosı calcolate. Questo richiede l’utilizzo di tre nuove parole riservate diSAS:

• NOPRINT e una opzione della PROC MEANS che deve essere specificata dopo il da-taset su cui operare. Il significato di questa opzione e che la procedura non deveessere creare output.

Page 40: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

40 Calcolare delle statistiche

• NWAY e una opzione della PROC MEANS che deve essere specificata dopo il datasetsu cui operare. Nel caso in cui ci sia una CLASS o una BY nella procedura,permette di emettere solo le statistiche riguardante la stratificazione relativa atutte le variabili specificate. Altrimenti verrebbero inseriti dei dati relativi aduna stratificazione parziale.

• OUTPUT OUT=dataset permette di specificare (tramite la OUT) il dataset che deveessere creato.

Ad esempio il Prog. 4.3 crea un dataset di nome stat che contiene le medie dei votiottenute dai ragazzi e dalle ragazze.

Programma 4.3: Dataset registro: creazione dataset riassuntivo

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome cognome mf presenze1-presenze10 voti1-voti5;

5 */

6 proc means data=libro.registro n noprint nway;

7 output out=stat;

8 class mf;

9 run;

Page 41: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Rappresentazioni grafiche

In questo Capitolo tratteremo come rappresentare in formato grafico i dataset analiz-zati.

5.1 la proc plot

Nelle funzionalita base fornite da SAS esiste la possibilita di ottenere alcune semplicesemplici rappresentazioni “grafiche” dei dati. La parola grafiche e volutamente scrittafra virgolette, in quanto il grafico viene generato nella finestra di output ed utilizzandosolo caratteri. In realta si tratta di una rappresentazione molto approssimativa. Talifunzionalita sono comunque utili se ci si trova a lavorare su terminali alfanumerici (comequelli di un mainframe). La procedura che permette di ottenere tali rappresentazionie la PROC PLOT.

Problema 15: Grafico popolazione e superficie. Rappresentare graficamentela relazione fra popolazione e superficie di ogni regione.

Il Problema 15 puo essere risolto tramite una PROC PLOT come si puo vedere nelProg. 5.1.

Programma 5.1: Dataset regioni: inizializzazione

1 libname libro ’c:\Desktop’;2 /*

3 data libro.regioni;

4 input regione $ abitanti superfic;

5 */

6 proc plot data=libro.regioni;

7 plot abitanti*superfic;

8 run;

La sintassi della PROC PLOT e analoga alle altre procedure che sono gia state in-trodotte. Il grafico da rappresentare e definito tramite la parola riservata PLOT, doveogni relazione da rappresentare viene individuata tramite la coppia delle due variabili(indipendente e dipendente) separate da un asterisco. Piu relazioni possono essere raf-figurate in uno stesso grafico, in tal caso le relazioni vengono separate da uno (o piu)spazi, ma in questo caso e necessario:

• specificare l’opzione OVERLAY, altrimenti ogni relazione viene rappresentata su ungrafico separato;

• specificare per ogni relazione quale simbolo (distinto) utilizzare per rappresentarei punti, altrimenti non e possibile distinguere le due relazioni.

Page 42: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

42 Rappresentazioni grafiche

Un semplice esempio di quanto appena esposto e ottenibile tramite il comandoPLOT abitanti*superfic=’a’ densita*superfic=’b’ /overlay.

5.2 la proc gplot

Una possibilita per avere grafici piu raffinati consiste nella PROC GPLOT, pero tale fun-zionalita e presente solo tramite il modulo SAS/GRAPH e non in SAS/BASE, pertantoviene introdutta dopo la PROC PLOT.

Nel Prog. 5.2 risolviamo nuovamente il Prob. 15, dove si puo notare che la sintassie identica a quella della PROC PLOT.

Programma 5.2: Dataset regioni: inizializzazione

1 libname libro ’c:\Desktop’;2 /*

3 data libro.regioni;

4 input regione $ abitanti superfic;

5 */

6 proc gplot data=libro.regioni;

7 plot abitanti*superfic;

8 run;

5.3 una migliore rappresentazione testuale

Come abbiamo visto in precedenza spesso i dataset contengono dati in formato nume-rico o comunque in un formato abbastanza criptico da poter essere interpretato solodalla persona che ha disegnato il dataset e il programma SAS. Questo e giustificatoanche dal fatto che l’interprete SAS elabora in maniera piu efficienti informazioni informato numerico anziche alfabetico (inoltre alcune stastiche hanno senso solo se i datisono numerici).

Questo e in contrapposizione con il fatto che alcune informazioni sono per loronatura alfabetica: si pensi ad esempio alla nazionalita di una persona, oppure il giudiziosu un prodotto (pessimo, neutrale, buono). In questo caso diventa conveniente fornireuna corrispondenza biunivoca fra i valori letterali e quelli numerici. Cio viene realizzatotramite la PROC FORMAT, dove dei nuovi formati vengono definiti.

Successivamente (tipicamente in un data step) viene dichiarato il formato di unavariabile con l’istruzione FORMAT.

Problema 16: Format. Consideriamo un dataset in cui l’unica variabile rappresentiun colore fra Rosso, Giallo e Blu, identificati rispettivamente dai valori numerici 0, 1 e2. Stampare il dataset con i nomi dei colori.

Page 43: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

5.3 Una migliore rappresentazione testuale 43

Programma 5.3: Esempio di FORMAT

1 proc format;

2 value $colore ’0’=’Rosso’ ’1’=’Giallo’ ’2’=’Blu’;

3 run;

4 data prog;

5 input colore;

6 datalines;

7 0

8 2

9 2

10 1

11 0

12 ;

13 label colore=’Colore inserito’;

14 format colore $colore;

15 run;

16 proc print data=colore;

17 run;

Page 44: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze
Page 45: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Dai dati alle informazioni

In questo capitolo ci occupiamo di estrarre informazioni utili dai dati.

6.1 analisi delle frequenze

Una delle piu semplici analisi statistiche che sono possibili su un dataset e l’analisi dellefrequenze. Visto il ruolo basilare occupato da tale analisi, in SAS una procedura vienededicata all’uopo: la PROC FREQ.

La sintassi e quella standard dei PROC step in SAS, e l’output e il numero dioccorrenze per ogni valore della variabile specificata.

Problema 17: Analisi frequenze. Si consideri il dataset del registro. Effettuareun’analisi delle frequenze riguardante il numbero di assenze di ogni alunno

La soluzione al Prob. 17 (visualizzata nel Prog. 6.1) sfrutta il Prog. 3.4 per calcolareil numero di assenze per ogni alunno. L’analisi delle frequenze richiede una semplicechiamata della PROC FREQ.

Programma 6.1: Dataset registro: evidenzazione assenze

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome $ cognome $ mf $ (prese1-prese10) ($) voti1-voti5;

5 */

6 data pres;

7 set registro;

8 array presenze[10] prese1 - prese10;

9 do i=1 to 10;

10 if presenze[i] eq ’a’ then tassenze+1;

11 end;

12 run;

13 proc freq data=pres;

14 table tassenze;

15 run;

Analizzando piu in dettaglio il Prog. 6.1 si puo notare come la variabile su cuieffettuare l’analisi delle frequenze viene indicata tramite la direttiva TABLES.

6.2 la proc corr

Un tipo di informazione utile presente nei dati, ma che non sempre e facilmente indivi-duabile e la cosidetta correlazione lineare che esprime quanto una variabile sia funzionelineare di una seconda variabile.

Page 46: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

46 Dai dati alle informazioni

In questo caso SAS permette di calcolare facilmente la correlazione lineare di ognicoppia di variabili presi in un determinato insieme. Un esempio esemplificativo dellautilita di tale approccio e rintracciabile nel campo degli esami universitari.

Studente Esame1 Esame2 Esame3 Esame4 Esame5 Esame6

Mario Rossi 24 27 26 24 27 26Giovanni Bianchi 23 28 24 23 24 25Laura Verdi 25 29 30 30 27 29

Tabella 6.1: Esami sostenuti

Nella Tabella 6.2 sono riportati i voti ottenuti da alcuni studenti per alcuni esami.Nella prima riga indichiamo i nomi delle variabili che utilizzeremo in SAS. L’obiettivoe determinare quali esami presentano delle votazioni maggiormente correlate fra loro.

Programma 6.2: Dataset esami: correlazione voti

1 libname libro ’c:\Desktop’;2 /*

3 data libro.esami;

4 input nome $ cognome $ voti1-voti6;

5 */

6 datalines;

7 Mario Rossi 24 27 26 24 27 26

8 Giovanni Bianchi 23 28 24 23 24 25

9 Laura Verdi 25 29 30 30 27 29

10 run;

11 proc corr data=libro.esami;

12 var voti1-voti6;

13 run;

Il risultato del Programma 6.2 e un riassunto delle principali statistiche riguardantiil dataset e i dati riguardanti la correlazione di ogni coppia di esami. Siccome levariabili interessate sono 6 i risultati considerano 62 = 36 correlazioni, rendendo difficileidentificare rapidamente quali variabili siano maggiormente collegate. Per limitarequesto problema in SAS viene permesso di separare le variabili indipendenti da quelledipendenti tramite la WITH: tale clausola permette di specificare le variabili dipendentiche, nel caso tale clausola non sia specificata, si intendo essere coincindenti con levariabili indipendenti specificate con VAR.

Una opzione della PROC CORR e BEST che puo essere posta uguale al numero dicorrelazioni che devono essere visualizzate per ogni variabile: chiaramente vengonovisualizzate solo le correlazioni piu significative. Ad esempio il Prog. 6.2 potrebbe es-sere modificato utilizzando l’istruzione proc corr data=libro.esami /best=2; permostrare solo 2 correlazioni per variabile.

Page 47: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

6.3 Tabelle a 2 entrate 47

6.3 tabelle a 2 entrate

Una analisi delle frequenze piu raffinata e quella della cosiddetta tabella a 2 entrate,dove vengono visualizzate le frequenze di una coppia di valori, una per ogni variabile. Lasintassi e analoga a quella gia spiegata della PROC FREQ, dove le due variabili interessatevengono divise dall’asterisco *. Un esempio viene mostrato nel Prog. 6.3.

Programma 6.3: Dataset esami: tabella a 2 entrate

1 /*

2 data libro.esami;

3 input nome $ cognome $ voti1-voti6;

4 */

5 proc freq data=libro.esami;

6 tables voti1*voti2;

7 run;

6.4 analisi di regressione

Assumiamo che due variabili contengano dati che sono in relazione rappresentabile conuna retta (ovvero si assume che y = ax+ b dove x e y sono rispettivamente la variabileindipendente e dipendente). In questo caso siamo interessati a trovare le due costantia, b che meglio identificano la relazione: cio viene abitualmente ottenuto con il metododei minimi quadrati che richiede il calcolo dei valori di a, b che minimizzano la funzione∑

i(axi + b− yi)2 dove xi, yi sono i valori delle variabili nel dataset. La procedura che

permette di realizzare questo e la PROC REG.

Problema 18: Regressione lineare. Supponiamo che esista una correlazionelineare fra il numero di assenze e la somma delle votazioni ottenute. Quale e la rettache identifica questa relazione?

Nel Prog. 6.4 i cicli DO calcolano il numero totale di assenze e la somma dei vo-ti, memorizzandoli rispettivamente nelle variabili tassenze e tvoti. All’interno dellaPROC REG l’istruzione MODEL specifica la relazione che si vuole determinare: in partico-lare la sintassi e MODEL y=x dove y e la variabile dipendente e x quella indipendente.

Il risultato della PROC REG e abbastanza complesso e non completamente intuitivo:i due parametri b e a sono rispettivamente denominati INTERCEPT e con il nome dellavariabile indipendente indicata nella MODEL.

6.5 grafico di regressione

Come spiegato nella Sez. 6.4 la PROC REG permette di individuare una retta che per-mette (sperabilmente) di approssimare i dati analizzati. Una rappresentazione graficadi tale fatto consiste nel rappresentare contemporaneamente (ovvero in un unico gra-fico) sia la retta che i dati analizzati. Cio puo essere ottenuto tramite una istruzione

Page 48: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

48 Dai dati alle informazioni

Programma 6.4: Dataset registro: relazione fra assenze e media voti

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome $ cognome $ mf $ (prese1-prese10) ($) voti1-voti5;

5 */

6 data pres;

7 set registro;

8 array presenze[10] prese1 - prese10;

9 array votazion[10] voti1 - voti5;

10 do i=1 to 10;

11 if presenze[i] eq ’a’ then tassenze+1;

12 end;

13 do i=1 to 5;

14 if votazion[i] eq ’a’ then tvoti+votazion[i];

15 end;

16 run;

17 proc reg data=pres;

18 model tvoti=tassenze;

19 run;

PLOT all’interno della PROC REG. Nel Prog. 6.5 viene mostrato un programma derivatodal Prog. 6.4 per visualizzare tale grafico.

Page 49: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

6.5 Grafico di regressione 49

Programma 6.5: Dataset registro: relazione fra assenze e media voti

1 libname libro ’c:\Desktop’;2 /*

3 data libro.registro;

4 input nome $ cognome $ mf $ (prese1-prese10) ($) voti1-voti5;

5 */

6 data pres;

7 set registro;

8 array presenze[10] prese1 - prese10;

9 array votazion[10] voti1 - voti5;

10 do i=1 to 10;

11 if presenze[i] eq ’a’ then tassenze+1;

12 end;

13 do i=1 to 5;

14 if votazion[i] eq ’a’ then tvoti+votazion[i];

15 end;

16 run;

17 proc reg data=pres;

18 model tvoti=tassenze;

19 plot predicted. *tassenze=’x’ tvoti*tassenze=’*’ /overlay;

20 run;

Page 50: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze
Page 51: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Esercizi riepilogativi

Gli esercizi in questo capitolo sono affrontabili gia dopo avere letto (e compreso) laparte riguardante i data step, in quanto i vari obiettivi da realizzare sono chiaramentedistinti e quindi dovrebbe essere semplice comprendere quali conoscenze siano richiesteda ogni parte del problema.

Problema 19: Analisi di osservazioni botaniche. Si consideri un dataset conil seguente insieme di variabili:

n numero progressivo dell’osservazione.

tr codice di controllo, e un intero fra 1 e 6.

tree

br codice alfanumerico del ramo a cui si riferisce l’osservazione.

tl lunghezza del ramo

in numero di misurazioni effettuate sul campione considerato

inter valori delle misurazioni effettuate sul campione considerato, al massimo sono 29misurazioni.

Si scriva un programma SAS per calcolare:

1. per ogni osservazione, la media ed il massimo delle lunghezze fra i nodi;

2. la lunghezza media del ramo, suddivisa per trattamento;

3. la correlazione fra lunghezza del ramo, numero di misurazioni e tipo di tratta-mento;

4. per ogni albero, il numero di rami (branch) distinti considerati.

Page 52: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze
Page 53: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Soluzioni degli esercizi

Problema 9. Con le nozioni che erano state introdotte prima del testo del problemanon era possibile inserire i dati all’interno del programma: infatti DLM e un’opzione diINFILE, ed i dati nel programma potevano essere separati solo da spazi. Per scrivere idati mancanti e necessario l’utilizzo degli informat.

Problema 11. In tassenze ci sarebbe il numero totale di assenze analizzate fino a quelmomento, conseguentemente alla fine ci sarebbe stato il numero di assenze, sommatosu tutti gli studenti.

Problema 14. Il Prog. 8.1 risolve il problema.

Programma 8.1: Dataset registro: relazione fra assenze e media voti

1 libname libro ’a:;

2 data libro.ferrovia;

3 input partenza arrivo data date9. numpass;

4 datalines;

5 milano bologna 10Mar2002 2034

6 milano bologna 11Mar2002 2538

7 milano bologna 12Mar2002 2212

8 milano bologna 13Mar2002 1823

9 bologna milano 10Mar2002 2034

10 bologna milano 11Mar2002 2563

11 bologna milano 12Mar2002 2418

12 bologna milano 13Mar2002 2012

13 ;

14 run;

15 proc means data=libro.ferrovia mean;

16 var numpass;

17 run;

18 proc means data=libro.ferrovia mean;

19 class data;

20 var numpass;

21 run;

Problema 19. Il Prog. 8 risolve il problema, dove si assume che i dati siano nel filedati.txt.

Page 54: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

54 Soluzioni degli esercizi

Programma 8.2: Soluzione del Prob.. 19

1 libname ’c:\Lezioni\es04’;2 data origine;

3 infile ’c:\Lezioni\es04\dati.txt’ missover;

4 input N TR TREE$ BR$ TL IN INTER1-INTER29;

5 run:

6 data divisi;

7 set origine;

8 array inter[29];

9 do i=1 to in;

10 t=inter[i];

11 keep n t;

12 output;

13 end;

14 run;

15

16 proc means data=divisi max mean;

17 class n;

18 var t;

19 run;

20

21 proc means data=origine mean;

22 class tr;

23 var tl;

24 run;

25

26 proc corr data=origine best=2;

27 var tl in tr;

28 run;

29

30 proc sort data=origine;

31 by tree br;

32 run;

33

34 data conta;

35 set origine;

36 by tree br;

37 if first.tree then i=0;

38 if first.br then i+1;

39 if last.tree;

40 keep tree br i;

41 run;

42

43 proc print data=conta;

44 run;

Page 55: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Elenco dei problemi

1 inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Lettura formato CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 salvataggio in libreria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 salvataggio in libreria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 salvataggio in libreria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 calcolo densita abitativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 stampa contenuto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Registro scolastico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 DATALINES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2610 Numero assenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2711 Uso dei contatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2912 stampe ordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2913 ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3314 Analisi statistica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3815 Grafico popolazione e superficie . . . . . . . . . . . . . . . . . . . . . . . . 4116 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4217 Analisi frequenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4518 Regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4719 Analisi di osservazioni botaniche . . . . . . . . . . . . . . . . . . . . . . . . 51

Page 56: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Elenco dei programmi

2.1 Esempio di commento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Esempio di libref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Copiare un dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.4 Definizione e inizializzazione di un dataset . . . . . . . . . . . . . . . . . . 172.5 Dataset regioni: inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . 172.6 Dataset regioni: lettura formato CSV . . . . . . . . . . . . . . . . . . . . . 182.7 Dataset regioni: salvataggio in libreria . . . . . . . . . . . . . . . . . . . . 192.8 Dataset regioni: salvataggio in libreria . . . . . . . . . . . . . . . . . . . . 192.9 Dataset regioni: salvataggio in libreria . . . . . . . . . . . . . . . . . . . . 192.10 Dataset regioni: calcolo densita abitativa . . . . . . . . . . . . . . . . . . . 202.11 Dataset regioni: contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.12 Dataset regioni: stampa contenuto . . . . . . . . . . . . . . . . . . . . . . 212.13 Registro scolastico: inserimento dati . . . . . . . . . . . . . . . . . . . . . 222.14 Dataset registro: partizionamento IF . . . . . . . . . . . . . . . . . . . . . 233.1 Dataset registro: inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . 253.2 Dataset registro: inizializzazione su colonne . . . . . . . . . . . . . . . . . 263.3 Dataset registro: inizializzazione con informat . . . . . . . . . . . . . . . . 263.1 Ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.4 Dataset registro: evidenzazione assenze . . . . . . . . . . . . . . . . . . . . 303.5 Dataset regioni: stampe ordinate . . . . . . . . . . . . . . . . . . . . . . . 303.6 Dataset registro: partizionamento con CLASS . . . . . . . . . . . . . . . . . 313.7 Dataset registro: partizionamento con BY . . . . . . . . . . . . . . . . . . . 323.8 Esempio di commento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.9 Dataset registro: stampa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.10 descrizioni colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1 Dataset regioni: statistiche sulla densita abitativa . . . . . . . . . . . . . . 374.2 Dataset regioni: estrazione osservazioni estreme . . . . . . . . . . . . . . . 384.3 Dataset registro: creazione dataset riassuntivo . . . . . . . . . . . . . . . . 405.1 Dataset regioni: inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . 415.2 Dataset regioni: inizializzazione . . . . . . . . . . . . . . . . . . . . . . . . 425.3 Esempio di FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436.1 Dataset registro: evidenzazione assenze . . . . . . . . . . . . . . . . . . . . 456.2 Dataset esami: correlazione voti . . . . . . . . . . . . . . . . . . . . . . . . 466.3 Dataset esami: tabella a 2 entrate . . . . . . . . . . . . . . . . . . . . . . . 476.4 Dataset registro: relazione fra assenze e media voti . . . . . . . . . . . . . 486.5 Dataset registro: relazione fra assenze e media voti . . . . . . . . . . . . . 498.1 Dataset registro: relazione fra assenze e media voti . . . . . . . . . . . . . 538.2 Soluzione del Prob.. 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Page 57: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Elenco delle figure

2.1 Schema di istruzione condizionale . . . . . . . . . . . . . . . . . . . . . . . 82.2 Come si sviluppa un programma . . . . . . . . . . . . . . . . . . . . . . . 102.3 Schema riassuntivo del sistema SAS . . . . . . . . . . . . . . . . . . . . . . 102.4 Esempio di dataset: popolazione e superficie delle regioni italiane . . . . . 13

3.1 Array voti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.2 Array voti e variabili associate . . . . . . . . . . . . . . . . . . . . . . . . 28

Page 58: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Indice analitico

ARRAY, 28array, 27

BT, 30BY, 30, 35

ciclo, 28CLASS, 30

DATA, 14data step, 14dataset, 12dataset permanente, 14dataset temporaneo, 14dati mancanti, 25dato, 12do, 28DROP, 19

editor, 11

FIRST, 36FORMAT, 33, 40

graph, 11

help, 11

ID, 32IF, 22, 23

KEEP, 19

LABEL, 33LAST, 36LIBNAME, 14libref, 14libreria, 14linguaggio, 9, 13log, 11

MODEL, 46

obs, 32osservazione, 12output, 11

PLOT, 39

print, 33PROC

CONTENTS, 20CORR, 44FORMAT, 40FREQ, 43, 45GPLOT, 39MEANS, 35, 37PLOT, 39PRINT, 20, 32, 33, 35REG, 45, 46SORT, 29, 30STEP, 20UNIVARIATE, 37

procstep, 14

PROC MEANS, 36programma, 9

RUN, 14

SET, 14sistema, 9

TABLE, 43TITLE, 32

VAR, 32, 35variabile, 12

58

Page 59: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Licenza per Documentazione

Libera GNU

Versione 1.1, Marzo 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USAChiunque puo copiare e distribuire copie letterali di questo documento di licenza, ma non nee permessa la modifica.

0. preambolo

Lo scopo di questa licenza e di rendere un manuale, un testo o altri documenti scritti liberi nelsenso di assicurare a tutti la liberta effettiva di copiarli e redistribuirli, con o senza modifiche,a fini di lucro o no. In secondo luogo questa licenza prevede per autori ed editori il modoper ottenere il giusto riconoscimento del proprio lavoro, preservandoli dall’essere consideratiresponsabili per modifiche apportate da altri.

Questa licenza e un copyleft: cio vuol dire che i lavori che derivano dal documento originaledevono essere ugualmente liberi. e il complemento alla Licenza Pubblica Generale GNU, chee una licenza di tipo copyleft pensata per il software libero.

Abbiamo progettato questa licenza al fine di applicarla alla documentazione del softwarelibero, perche il software libero ha bisogno di documentazione libera: un programma liberodovrebbe accompagnarsi a manuali che forniscano la stessa liberta del software. Ma questalicenza non e limitata alla documentazione del software; puo essere utilizzata per ogni testoche tratti un qualsiasi argomento e al di la dell’avvenuta pubblicazione cartacea. Raccoman-diamo principalmente questa licenza per opere che abbiano fini didattici o per manuali diconsultazione.

1. applicabilita e definizioni

Questa licenza si applica a qualsiasi manuale o altra opera che contenga una nota messadal detentore del copyright che dica che si puo distribuire nei termini di questa licenza.Con Documento, in seguito ci si riferisce a qualsiasi manuale o opera. Ogni fruitore e undestinatario della licenza e viene indicato con voi.

Una versione modificata di un documento e ogni opera contenente il documento stessoo parte di esso, sia riprodotto alla lettera che con modifiche, oppure traduzioni in un’altralingua.

Una sezione secondaria e un’appendice cui si fa riferimento o una premessa del documentoe riguarda esclusivamente il rapporto dell’editore o dell’autore del documento con l’argomentogenerale del documento stesso (o argomenti affini) e non contiene nulla che possa esserecompreso nell’argomento principale. (Per esempio, se il documento e in parte un manualedi matematica, una sezione secondaria non puo contenere spiegazioni di matematica). Ilrapporto con l’argomento puo essere un tema collegato storicamente con il soggetto principaleo con soggetti affini, o essere costituito da argomentazioni legali, commerciali, filosofiche,etiche o politiche pertinenti.

Le sezioni non modificabili sono alcune sezioni secondarie i cui titoli sono esplicitamente

Page 60: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

60 Licenza per Documentazione Libera GNU

dichiarati essere sezioni non modificabili, nella nota che indica che il documento e realizzatosotto questa licenza.

I testi copertina sono dei brevi brani di testo che sono elencati nella nota che indica cheil documento e realizzato sotto questa licenza.

Una copia trasparente del documento indica una copia leggibile da un calcolatore, codi-ficata in un formato le cui specifiche sono disponibili pubblicamente, i cui contenuti possonoessere visti e modificati direttamente, ora e in futuro, con generici editor di testi o (per imma-gini composte da pixel) con generici editor di immagini o (per i disegni) con qualche editor didisegni ampiamente diffuso, e la copia deve essere adatta al trattamento per la formattazioneo per la conversione in una varieta di formati atti alla successiva formattazione. Una copiafatta in un altro formato di file trasparente il cui markup e stato progettato per intralciareo scoraggiare modifiche future da parte dei lettori non e trasparente. Una copia che non etrasparente e opaca.

Esempi di formati adatti per copie trasparenti sono l’ASCII puro senza markup, il formatodi input per Texinfo, il formato di input per LaTex, SGML o XML accoppiati ad una DTDpubblica e disponibile, e semplice HTML conforme agli standard e progettato per esseremodificato manualmente. Formati opachi sono PostScript, PDF, formati proprietari chepossono essere letti e modificati solo con word processor proprietari, SGML o XML per cuinon e in genere disponibile la DTD o gli strumenti per il trattamento, e HTML generatoautomaticamente da qualche word processor per il solo output.

La pagina del titolo di un libro stampato indica la pagina del titolo stessa, piu qualchepagina seguente per quanto necessario a contenere in modo leggibile, il materiale che la licenzaprevede che compaia nella pagina del titolo. Per opere in formati in cui non sia contemplataesplicitamente la pagina del titolo, con pagina del titolo si intende il testo prossimo al titolodell’opera, precedente l’inizio del corpo del testo.

2. copie letterali

Si puo copiare e distribuire il documento con l’ausilio di qualsiasi mezzo, per fini di lucro enon, fornendo per tutte le copie questa licenza, le note sul copyright e l’avviso che questalicenza si applica al documento, e che non si aggiungono altre condizioni al di fuori di quelledella licenza stessa. Non si possono usare misure tecniche per impedire o controllare lalettura o la produzione di copie successive alle copie che si producono o distribuiscono. Perosi possono ricavare compensi per le copie fornite. Se si distribuiscono un numero sufficientedi copie si devono seguire anche le condizioni della sezione 3.

Si possono anche prestare copie e con le stesse condizioni sopra menzionate possono essereutilizzate in pubblico.

3. copiare in notevoli quantita

Se si pubblicano a mezzo stampa piu di 100 copie del documento, e la nota della licenzaindica che esistono uno o piu testi copertina, si devono includere nelle copie, in modo chiaro eleggibile, tutti i testi copertina indicati: il testo della prima di copertina in prima di copertinae il testo di quarta di copertina in quarta di copertina. Ambedue devono identificare l’editoreche pubblica il documento. La prima di copertina deve presentare il titolo completo con tuttele parole che lo compongono egualmente visibili ed evidenti. Si puo aggiungere altro materialealle copertine. Il copiare con modifiche limitate alle sole copertine, purche si preservino iltitolo e le altre condizioni viste in precedenza, e considerato alla stregua di copiare alla lettera.

Se il testo richiesto per le copertine e troppo voluminoso per essere riprodotto in mo-

Page 61: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Licenza per Documentazione Libera GNU 61

do leggibile, se ne puo mettere una prima parte per quanto ragionevolmente puo stare incopertina, e continuare nelle pagine immediatamente seguenti.

Se si pubblicano o distribuiscono copie opache del documento in numero superiore a 100,si deve anche includere una copia trasparente leggibile da un calcolatore per ogni copia o men-zionare per ogni copia opaca un indirizzo di una rete di calcolatori pubblicamente accessibilein cui vi sia una copia trasparente completa del documento, spogliato di materiale aggiuntivo,e a cui si possa accedere anonimamente e gratuitamente per scaricare il documento usandoi protocolli standard e pubblici generalmente usati. Se si adotta l’ultima opzione, si deveprestare la giusta attenzione, nel momento in cui si inizia la distribuzione in quantita elevatadi copie opache, ad assicurarsi che la copia trasparente rimanga accessibile all’indirizzo stabi-lito fino ad almeno un anno di distanza dall’ultima distribuzione (direttamente o attraversorivenditori) di quell’edizione al pubblico.

e caldamente consigliato, benche non obbligatorio, contattare l’autore del documentoprima di distribuirne un numero considerevole di copie, per metterlo in grado di fornire unaversione aggiornata del documento.

4. modifiche

Si possono copiare e distribuire versioni modificate del documento rispettando le condizionidelle precedenti sezioni 2 e 3, purche la versione modificata sia realizzata seguendo scrupolo-samente questa stessa licenza, con la versione modificata che svolga il ruolo del documento,cosı da estendere la licenza sulla distribuzione e la modifica a chiunque ne possieda una copia.Inoltre nelle versioni modificate si deve:

• Usare nella pagina del titolo (e nelle copertine se ce ne sono) un titolo diverso daquello del documento, e da quelli di versioni precedenti (che devono essere elencatinella sezione storia del documento ove presenti). Si puo usare lo stesso titolo di unaversione precedente se l’editore di quella versione originale ne ha dato il permesso.

• Elencare nella pagina del titolo, come autori, una o piu persone o gruppi responsabiliin qualita di autori delle modifiche nella versione modificata, insieme ad almeno cinquefra i principali autori del documento (tutti gli autori principali se sono meno di cinque).

• Dichiarare nella pagina del titolo il nome dell’editore della versione modificata in qualitadi editore.

• Conservare tutte le note sul copyright del documento originale.

• Aggiungere un’appropriata licenza per le modifiche di seguito alle altre licenze suicopyright.

• Includere immediatamente dopo la nota di copyright, un avviso di licenza che diapubblicamente il permesso di usare la versione modificata nei termini di questa licenza,nella forma mostrata nell’addendum alla fine di questo testo.

• Preservare in questo avviso di licenza l’intera lista di sezioni non modificabili e testicopertina richieste come previsto dalla licenza del documento.

• Includere una copia non modificata di questa licenza.

• Conservare la sezione intitolata Storia, e il suo titolo, e aggiungere a questa un ele-mento che riporti al minimo il titolo, l’anno, i nuovi autori, e gli editori della versionemodificata come figurano nella pagina del titolo. Se non ci sono sezioni intitolate Storianel documento, createne una che riporti il titolo, gli autori, gli editori del documento

Page 62: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

62 Licenza per Documentazione Libera GNU

come figurano nella pagina del titolo, quindi aggiungete un elemento che descriva laversione modificata come detto in precedenza.

• Conservare l’indirizzo in rete riportato nel documento, se c’e, al fine del pubblico accessoad una copia trasparente, e possibilmente l’indirizzo in rete per le precedenti versioni sucui ci si e basati. Questi possono essere collocati nella sezione Storia. Si puo omettereun indirizzo di rete per un’opera pubblicata almeno quattro anni prima del documentostesso, o se l’originario editore della versione cui ci si riferisce ne da il permesso.

• In ogni sezione di Ringraziamenti o Dediche, si conservino il titolo, il senso, il tonodella sezione stessa.

• Si conservino inalterate le sezioni non modificabili del documento, nei propri testi e neipropri titoli. I numeri della sezione o equivalenti non sono considerati parte del titolodella sezione.

• Si cancelli ogni sezione intitolata Riconoscimenti. Solo questa sezione puo non essereinclusa nella versione modificata.

• Non si modifichi il titolo di sezioni esistenti come miglioria o per creare confusione coni titoli di sezioni non modificabili.

Se la versione modificata comprende nuove sezioni di primaria importanza o appendiciche ricadono in sezioni secondarie, e non contengono materiale copiato dal documento, siha facolta di rendere non modificabili quante sezioni si voglia. Per fare cio si aggiunga illoro titolo alla lista delle sezioni immutabili nella nota di copyright della versione modificata.Questi titoli devono essere diversi dai titoli di ogni altra sezione.

Si puo aggiungere una sezione intitolata Riconoscimenti, a patto che non contenga altroche le approvazioni alla versione modificata prodotte da vari soggetti–per esempio, afferma-zioni di revisione o che il testo e stato approvato da una organizzazione come la definizionenormativa di uno standard.

Si puo aggiungere un brano fino a cinque parole come Testo Copertina, e un brano fino a 25parole come Testo di Retro Copertina, alla fine dell’elenco dei Testi Copertina nella versionemodificata. Solamente un brano del Testo Copertina e uno del Testo di Retro Copertinapossono essere aggiunti (anche con adattamenti) da ciascuna persona o organizzazione. Se ildocumento include gia un testo copertina per la stessa copertina, precedentemente aggiuntoo adattato da voi o dalla stessa organizzazione nel nome della quale si agisce, non se nepuo aggiungere un altro, ma si puo rimpiazzare il vecchio ottenendo l’esplicita autorizzazionedall’editore precedente che aveva aggiunto il testo copertina.

L’autore/i e l’editore/i del documento non ottengono da questa licenza il permesso diusare i propri nomi per pubblicizzare la versione modificata o rivendicare l’approvazione diogni versione modificata.

5. unione di documenti

Si puo unire il documento con altri realizzati sotto questa licenza, seguendo i termini definitinella precedente sezione 4 per le versioni modificate, a patto che si includa l’insieme di tuttele Sezioni Invarianti di tutti i documenti originali, senza modifiche, e si elenchino tutte comeSezioni Invarianti della sintesi di documenti nella licenza della stessa.

Nella sintesi e necessaria una sola copia di questa licenza, e multiple sezioni invariantipossono essere rimpiazzate da una singola copia se identiche. Se ci sono multiple SezioniInvarianti con lo stesso nome ma contenuti differenti, si renda unico il titolo di ciascunasezione aggiungendovi alla fine e fra parentesi, il nome dell’autore o editore della sezione,

Page 63: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

Licenza per Documentazione Libera GNU 63

se noti, o altrimenti un numero distintivo. Si facciano gli stessi aggiustamenti ai titoli dellesezioni nell’elenco delle Sezioni Invarianti nella nota di copiright della sintesi.

Nella sintesi si devono unire le varie sezioni intitolate storia nei vari documenti originalidi partenza per formare una unica sezione intitolata storia; allo stesso modo si unisca ognisezione intitolata Ringraziamenti, e ogni sezione intitolata Dediche. Si devono eliminare tuttele sezioni intitolate Riconoscimenti.

6. raccolte di documenti

Si puo produrre una raccolta che consista del documento e di altri realizzati sotto questalicenza; e rimpiazzare le singole copie di questa licenza nei vari documenti con una solainclusa nella raccolta, solamente se si seguono le regole fissate da questa licenza per le copiealla lettera come se si applicassero a ciascun documento.

Si puo estrarre un singolo documento da una raccolta e distribuirlo individualmente sottoquesta licenza, solo se si inserisce una copia di questa licenza nel documento estratto e se siseguono tutte le altre regole fissate da questa licenza per le copie alla lettera del documento.

7. raccogliere insieme a lavori indipendenti

Una raccolta del documento o sue derivazioni con altri documenti o lavori separati o indipen-denti, all’interno di o a formare un archivio o un supporto per la distribuzione, non e unaversione modificata del documento nella sua interezza, se non ci sono copiright per l’interaraccolta. Ciascuna raccolta si chiama allora aggregato e questa licenza non si applica aglialtri lavori contenuti in essa che ne sono parte, per il solo fatto di essere raccolti insieme,qualora non siano pero loro stessi lavori derivati dal documento.

Se le esigenze del Testo Copertina della sezione 3 sono applicabili a queste copie deldocumento allora, se il documento e inferiore ad un quarto dell’intero aggregato i Testi Co-pertina del documento possono essere piazzati in copertine che delimitano solo il documentoall’interno dell’aggregato. Altrimenti devono apparire nella copertina dell’intero aggregato.

8. traduzioni

La traduzione e considerata un tipo di modifica, e di conseguenza si possono distribuire tradu-zioni del documento seguendo i termini della sezione 4. Rimpiazzare sezioni non modificabilicon traduzioni richiede un particolare permesso da parte dei detentori del diritto d’autore,ma si possono includere traduzioni di una o piu sezioni non modificabili in aggiunta alleversioni originali di queste sezioni immutabili. Si puo fornire una traduzione della presentelicenza a patto che si includa anche l’originale versione inglese di questa licenza. In caso didiscordanza fra la traduzione e l’originale inglese di questa licenza la versione originale ingleseprevale sempre.

9. termini

Non si puo applicare un’altra licenza al documento, copiarlo, modificarlo, o distribuirlo al difuori dei termini espressamente previsti da questa licenza. Ogni altro tentativo di applicareun’altra licenza al documento, copiarlo, modificarlo, o distribuirlo e deprecato e pone fineautomaticamente ai diritti previsti da questa licenza. Comunque, per quanti abbiano ricevutocopie o abbiano diritti coperti da questa licenza, essi non ne cessano se si rimane perfettamentecoerenti con quanto previsto dalla stessa.

Page 64: Imparare SAS - statistica.unimib.itdellavedova/didattica/lab_statistico... · Perµo chi impara a suonare il pianoforte si appoggia ad un insegnante che sfrutta secoli di esperienze

64 Licenza per Documentazione Libera GNU

10. revisioni future di questa licenza

La Free Software Foundation puo pubblicare nuove, rivedute versioni della Licenza per Docu-mentazione Libera GNU volta per volta. Qualche nuova versione potrebbe essere simile nellospirito alla versione attuale ma differire in dettagli per affrontare nuovi problemi e concetti.Si veda http://www.gnu.org/copyleft.

Ad ogni versione della licenza viene dato un numero che distingue la versione stessa. Se ildocumento specifica che si riferisce ad una versione particolare della licenza contraddistintadal numero o ogni versione successiva, si ha la possibilita di seguire termini e condizioni siadella versione specificata che di ogni versione successiva pubblicata (non come bozza) dallaFree Software Foundation. Se il documento non specifica un numero di versione particolare diquesta licenza, si puo scegliere ogni versione pubblicata (non come bozza) dalla Free SoftwareFoundation.