3. GENERALITÀ SULLE PROCEDURE SAS 3.1...

21
1 3. GENERALITÀ SULLE PROCEDURE SAS 3.1 Introduzione Come è stato detto in precedenza, l’elaborazione dei dati con il programma SAS viene generalmente effettuata mediante i PROC STEP (o passi di PROC), ossia mediante l’esecuzione di procedure che indicano al sistema il tipo di analisi che si desidera effettuare. Una qualsiasi procedura contenuta nelle librerie del sistema SAS è infatti un programma preconfezionato in grado di effettuare un particolare tipo di elaborazione dei dati. I dati su cui operano queste procedure devono essere in formato SAS. Con un PROC STEP si possono creare anche altri dataset SAS che a loro volta possono essere analizzati successivamente da altri passi di DATA o di PROC. Un PROC STEP inizia con la parola chiave procseguita dal nome della procedura che si vuole eseguire e termina con un DATA STEP, con un altro PROC STEP o con l'istruzione finale run;. Tutte le volte in cui si dispone di una procedura che consente di eseguire il tipo di analisi desiderata l’utente avrà il solo compito di individuare la procedura stessa e di selezionare le opzioni desiderate. Le procedure note al SAS sono estremamente numerose, tanto che il solo modulo del SAS Base ne contiene una settantina, a cui si aggiungono numerose altre procedure disponibili nei moduli più specializzati in determinati tipi di elaborazione dei dati. In generale un qualsiasi PROC STEP ha le seguenti caratteristiche - Comincia sempre con la parola chiave proc; - Si compone di un insieme di istruzioni; - Produce un output di default sulla finestra di output; - Può produrre un output più complesso o più leggero utilizzando le opzioni (di default le procedure calcolano gli indici statistici più noti, ma se ne possono richiedere altri, attraverso specifiche opzioni)

Transcript of 3. GENERALITÀ SULLE PROCEDURE SAS 3.1...

1

3. GENERALITÀ SULLE PROCEDURE SAS

3.1 Introduzione

Come è stato detto in precedenza, l’elaborazione dei dati con il programma SAS viene generalmente

effettuata mediante i PROC STEP (o passi di PROC), ossia mediante l’esecuzione di procedure che

indicano al sistema il tipo di analisi che si desidera effettuare.

Una qualsiasi procedura contenuta nelle librerie del sistema SAS è infatti un programma

preconfezionato in grado di effettuare un particolare tipo di elaborazione dei dati.

I dati su cui operano queste procedure devono essere in formato SAS.

Con un PROC STEP si possono creare anche altri dataset SAS che a loro volta possono essere

analizzati successivamente da altri passi di DATA o di PROC.

Un PROC STEP inizia con la parola chiave “proc” seguita dal nome della procedura che si vuole

eseguire e termina con un DATA STEP, con un altro PROC STEP o con l'istruzione finale run;.

Tutte le volte in cui si dispone di una procedura che consente di eseguire il tipo di analisi desiderata

l’utente avrà il solo compito di individuare la procedura stessa e di selezionare le opzioni desiderate.

Le procedure note al SAS sono estremamente numerose, tanto che il solo modulo del SAS Base ne

contiene una settantina, a cui si aggiungono numerose altre procedure disponibili nei moduli più

specializzati in determinati tipi di elaborazione dei dati.

In generale un qualsiasi PROC STEP ha le seguenti caratteristiche

- Comincia sempre con la parola chiave “proc”;

- Si compone di un insieme di istruzioni;

- Produce un output di default sulla finestra di output;

- Può produrre un output più complesso o più leggero utilizzando le opzioni (di default le procedure

calcolano gli indici statistici più noti, ma se ne possono richiedere altri, attraverso specifiche opzioni)

2

3.2 Le procedure di visualizzazione dei data set (Proc PRINT, FORMAT e CONTENTS)

Nelle pagine precedenti abbiamo già utilizzato la procedura che visualizza a terminale il contenuto di

un data set SAS (proc print) e la procedura che permette di vedere le caratteristiche delle variabili

che lo compongono, elencate in ordine alfabetico (proc contents).

Come tutte le altre PROC presenti nel SAS anche queste procedure possono essere personalizzate

utilizzando delle opportune opzioni. In queste dispense verranno esplicitamente considerate solo quelle

più comuni, dato che l’elenco completo e la loro descrizione è reperibile nel manuale online messo a

disposizione dal software.

La sintassi più semplice della Proc PRINT è

proc print data=<nome_del_dataset>;

var <elenco delle variabili, separate da almeno uno spazio bianco>;

format <elenco delle variabili, ciascuna con l’indicazione del formato>;

L’istruzione “var” serve per specificare le variabili da stampare, nell’ordine in cui vengono elencate.

La sua omissione fa sì che il programma stampi tutte le variabili contenute nel dataset, nell’ordine in

cui sono state lette. Se viene omesso il nome del data set da stampare, per default il SAS stamperà

l’ultimo data set.

Considerato per esempio il seguente data set che riporta il tasso di occupazione, il tasso di

disoccupazione ed il tasso di attività dei cinque comuni di una provincia italiana

data tassi;

input tasso_occup tasso_disocc tasso_attiv;

cards;

0.4861 0.0847 0.5320

0.5244 0.0741 0.5446

0.5367 0.0936 0.5939

0.4908 0.1004 0.5245

0.6468 0.0889 0.5892

;

se si volessero visualizzare a terminale solo i tassi di occupazione e di disoccupazione, il primo

espresso da 2 cifre decimali ed il secondo espresso con 3 cifre decimali, si potrebbero utilizzare le

seguenti istruzioni

3

Esempio 3.2.1

proc print data=tassi;

var tasso_occup tasso_disocc;

format tasso_occup 4.2 tasso_disocc 5.3;

run;

che genera questo output

Oss tasso_occup tasso_disocc

1 0.49 0.085

2 0.52 0.074

3 0.54 0.094

4 0.49 0.100

5 0.65 0.089

Come in tutte le procedure che danno luogo ad un output, anche la proc print dà la possibilità di

inserire una o più righe contenente i titoli che si vogliono assegnare mediante la parola chiave “title”

seguita dal numero della riga su cui deve comparire il titolo, da uno spazio bianco e dal testo del titolo,

racchiuso fra apici. La prima riga di titolo può essere indicata con “title1” o, più semplicemente, con

“title”, mentre le righe di titolo successive devono necessariamente contenere l’indicazione numerica

della riga.

Così, per esempio, se si volessero utilizzare 3 titoli, su tre righe diverse, si dovrebbero utilizzare le

righe

title 'testo del primo titolo';

title2 'testo del secondo titolo';

title3 'testo del terzo titolo';

Se, per esempio, si volesse stampare il data set precedente inserendo le seguenti due righe

Comuni della provincia X

Tassi di occupazione e di disoccupazione

si potrebbe utilizzare il seguente programma

4

proc print data=tassi;

var tasso_occup tasso_disocc;

format tasso_occup 4.2 tasso_disocc 5.3;

title 'Comuni della provincia X';

title2 'Tassi di occupazione e di disoccupazione';

run;

Va notato che le istruzioni relative ai titoli sono memorizzate dal SAS, nel senso che restano valide fino

a quando non viene chiusa la sessione di lavoro. Pertanto, una volta indicato un titolo, sarà necessario

modificarlo negli step successivi.

La proc print consente anche di stampare solo un certo numero di record, a partire dal primo o da

uno qualsiasi. Questo risultato viene utilizzando opportune opzioni fra parentesi, dopo il nome del data

set da visualizzare.

Per stampare solo le prime k osservazioni l’opzione è

proc print data=<nome_del_dataset>(obs=k);

mentre per stamparne k, a partire dalla m-esima, l’opzione da utilizzare è la seguente

proc print data=<nome_del_dataset> (firstobs=m obs=m+k-1);

Per esempio, nella prima proc print dell’esempio successivo si chiede al programma di stampare solo

i primi 2 record, mentre con la seconda proc print vengono visualizzati solo 2 record, a partire dal

terzo.

Esempio 3.2.2

proc print data=tassi (obs=2);

proc print data=tassi (firstobs=3 obs=4);

5

La Proc FORMAT viene invece usata per creare una libreria di format permanenti da utilizzare nei

DATA step o nei PROC step.

La sua sintassi è

proc format <opzioni>;

invalue <elenco delle variabili in input e loro formato >;

value <elenco delle variabili in output e loro formato >;

dove si userà l’istruzione “invalue” e/o “value” a seconda che si voglia attribuire un formato alle

variabili lette e/o alle variabili create.

Di seguito è riportato un esempio di questa procedura applicato ad un data set contenente alcune

variabili rilevate su 4 studenti universitari: matricola, sesso, se si tratta di studente in corso o fuori

corso e se lo studente ha ottenuto almeno 40 CFU.

Esempio 3.2.4

proc format;

value $sesso 'm'='maschio'

'f'='femmina';

value si_no 1='sì'

2='no';

data stud1;

input matricola 6. @8 genere $1. @10 incorso 1. @12 almeno40CFU 1.;

format genere $sesso.

incorso si_no.

almeno40CFU si_no.;

cards;

101122 m 1 1

101132 f 2 1

101234 f 1 2

101321 m 2 1

;

proc print;

run;

Mediante la proc format si stabilisce un formato, denominato “$sesso”, che potrà essere utilizzato

per variabili alfanumeriche che possono assumere solo le determinazioni “m” oppure “f”, ed un

formato, denominato “si_no”, utilizzabile per variabili numeriche che possono assumere solo i valori 1

oppure 2.

Nell’esempio considerato le istruzioni utilizzate nella proc format servono per stabilire che alle

determinazioni “m” e “f” assunte dalla variabile “genere” corrispondono i formati “maschio” e

6

“femmina”, mentre ai valori “1” e “2” delle variabili “incorso” e “almeno40CFU” corrispondono

rispettivamente le determinazioni “sì” e “no”.

L’attribuzione dei formati prestabiliti nella proc format alle tre variabili considerate viene effettuata

all’interno del DATA step, dopo l’istruzione input che elenca le variabili contenute nell’archivio

denominato “dataset1”.

La visualizzazione dei formati prestabiliti viene effettuata con la proc print che stampa a terminale la

seguente tabella

Oss matricola genere incorso almeno40CFU

1 101122 maschio sì sì

2 101132 femmina no sì

3 101234 femmina sì no

4 101321 maschio no sì

La procedura può essere utilizzata anche per costruire una variabile che assume determinazioni diverse

per diverse classi di valori di una variabile numerica che assume molti valori diversi. Nell’esempio

successivo si attribuisce la determinazione “bassa” ad una votazione compresa nell’intervallo [18, 23],

la determinazione “media” ad una votazione compresa nell’intervallo [24, 27] e la determinazione

“alta” ad una votazione maggiore o uguale a 28.

Esempio 3.2.5

proc format;

value votaz 18-23='bassa'

24-27='media'

28-30='alta';

La Proc CONTENTS serve per descrivere le caratteristiche di un archivio, restituendo il percorso del

file, il suo nome (completo di estensione) e il formato delle variabili.

La sua sintassi è

7

proc contents data=<nome_del_dataset>;

dove, se viene omesso il nome del data set, per default il SAS prenderà in esame l’ultimo. Se, per

esempio si considerano le seguenti istruzioni

Esempio 3.2.3

data archivio;

input x y $ z;

format x comma12.3 y $7. z 1.;

cards;

3455.457 piccolo 0

7568.903 medio 1

11777.346 grande 1

;

proc contents;

run;

si otterranno le seguenti informazioni relative alle variabili

Elenco alfabetico di variabili e attributi

# Variabile Tipo Lungh Formato

1 x Num 8 COMMA12.3

2 y Alfanum 8 $7.

3 z Num 8 1.

8

3.3 La Proc IMPORT

La lettura di file esterni con un formato diverso dal SAS e dall’ASCII viene effettuata mediante la Proc

IMPORT indicando in chiaro il percorso da seguire, il nome esatto del file (completo di estensione) e

il formato del file.

Il percorso da seguire non deve essere più lungo di 201 caratteri.

Per default, la Proc IMPORT considera i record a lunghezza variabile, per cui se il formato è a

lunghezza fissa occorre usare un DATA STEP in cui sia specificata un’istruzione INFILE che includa

le opzioni RECFM=F e LRECL=.

La sintassi è

PROC IMPORT DATAFILE="filename" | TABLE="tablename"

OUT=<libref.>SAS data set <(SAS data set option(s))>

<DBMS=identifier> <REPLACE>;

per cui va innanzitutto specificato se si tratta di:

- un data set: in questo caso si usa l’istruzione datafile = <nome_del_file>)

- una tabella: in questo caso si usa l’istruzione datatable = <nome_della_tabella>)

L’opzione “out=” serve per definire il nome del data set SAS che viene creato dalla lettura del file e

può essere sia temporaneo, sia permanente (a seconda della libreria associata) e può essere completata

con ulteriori opzioni facoltative relative alle caratteristiche del data set che si crea.

L’opzione “dbms=” serve per indicare al software il formato dei dati o della tabella da importare e può

assumere le determinazioni riportate nella prima colonna della tabella 3.3.1, mentre nella seconda

colonna è specificata l’estensione del file.

L’opzione “replace”, opzionale, va usata solo se si desidera sovrascrivere il file importato e va usata

con attenzione.

9

Tabella 3.3.1

Codifica dei file

Identificativo

DBMS Descrizione file

Estensione

file

ACCESS Microsoft Access 2000, 2002, 2003, 2007, 2010, and later table. The ACCESS LIBNAME

engine is used when DBMS=ACCESS.

.mdb

.accdb

ACCESSCS Microsoft Access table connecting remotely through SAS PC Files Serverusing the PCFILES

LIBNAME engine.

.mdb

.accdb

CSV Delimited file with comma-separated values .csv

DBF dBASE 5.0, IV, III+, and III files .dbf

DBFMEMO dBASE 5.0, IV, III+, and III files with memos FoxPro and Visual FoxPro files with memos

.dbf

.fpt

.dbt

DLM Delimited file (default delimiter is a blank) .*

DTA Stata file .dta

EXCEL Microsoft Excel 97, 2000, 2002, 2003, 2007, 2010, and later workbook using the LIBNAME

statement.

.xls

.xlsb

.xlsm

.xlsx

EXCEL4

EXCEL5 Microsoft Excel 4.0, Excel 5.0 or 7.0 (95) workbook. .xls

EXCELCS Microsoft Excel workbook connecting remotely through SAS PC Files Server. .xls,.xlsx,

.xlsb, xlsm

JMP JMP files in Version 7 and later format. .jmp

PARADOX Paradox DB files .db

PCFS (SAS PC

Files Server)

Microsoft Excel workbook files, JMP files, SPSS files, and Stata files connecting remotely

through SAS PC Files Server.

.xls, .jmp,

.sav, .dta

SAV SPSS file .sav

TAB Delimited file (tab-delimited values) .txt

WK1 Lotus1-2-3 Release 2 spreadsheet .wk1

WK3 Lotus 1-2-3 Release 3 spreadsheet .wk3

WK4 Lotus 1-2-3 Release 4 or 5 spreadsheet .wk4

XLS

Microsoft Excel 5.0, 95, 97, 2000, 2002, or 2003 workbook using file formats

Note: Transcoding is not supported for DBMS=XLS. Attempted execution of this operation

yields unpredictable results. Use DBMS=EXCEL or DBMS=EXCELCS with the SAS PC Files

Server as an alternative. Or, if your file has more than 255 columns, save the .xls file as .xlsx to

support transcoding.

.xls

XLSX Microsoft Excel 2007 and later workbook using file formats

10

Esempio 3.3.1

Considerato il file excel “occup.xlsx” contenuto in “c:\users\naddeo\desktop\” il programma per creare

un file SAS permanente di nome “occup” nella medesima directory è il seguente

libname libr1 "c:\users\naddeo\desktop\";

proc import datafile="c:\users\naddeo\desktop\occup.xlsx"

dbms=excel

out=libr1.occup;

proc print;

run;

11

3.4 La Proc EXPORT

La procedura per effettuare il processo inverso rispetto a quello appena descritto è la Proc EXPORT,

che consente di leggere un data set SAS e di scriverlo in un formato differente.

La sintassi di questa procedura è

PROC EXPORT DATA=<libref.>SAS data set <(SAS data set option(s))>

OUTFILE="filename" | OUTTABLE="tablename"

<DBMS=identifier> <REPLACE> <LABEL>;

dove l’istruzione “dbms=” può assumere le determinazioni indicata nella tabella 3.3.1 del precedente

paragrafo. Ik programma seguebte, per esempio, crea un file EXCEL.

Esempio 3.4.1

data studenti;

input sesso $ eta;

cards;

m 23

f 19

m 18

m 22

f 25

f 26

;

proc export data=studenti

dbms=xlsx

outfile="c:\users\naddeo\desktop\stud";

run;

Se si specifica l’opzione DBMS=DLM per creare un file delimitato si può aggiungere l’indicazione

circa il delimitatore (che separa le singole determinazioni delle variabili) mediante l’istruzione

DELIMITER=’delimitatore’;

dove il delimitatore deve essere racchiuso fra apici (o virgolette), per cui se si desidera usare il simbolo

& (al posto dello spazio bianco previsto per default) l’istruzione assumerà la forma

12

DELIMITER='&';

Questo programma SAS crea, a partire dall’archivio studenti, un dataset ECXCEL permanente,

denominato “stud.xlsx”, nella directory "c:\users\naddeo\desktop".

Se invece si facesse seguire la descrizione del dataset studenti dalle istruzioni

proc export data=studenti

dbms=csv

outfile="c:\users\naddeo\desktop\stud";

run;

si otterrebbe il file permanente stud (sempre nella medesima directory) avente la forma

sesso,eta

m,23

f,19

m,18

m,22

f,25

f,26

Se, invece, si utilizzassero le seguenti istruzioni

proc export data=studenti

outfile="c:\users\naddeo\desktop\student"

dbms=dlm;

delimiter='&';

run;

si otterrebbe (sempre nella medesima directory) un file, denominato “student” avente la forma seguente

sesso&eta

m&23

f&19

m&18

m&22

f&25

f&26

13

Se si volesse sostituire il delimitatore “&” con uno spazio bianco sarebbe sufficiente far eseguire al

SAS le seguenti istruzioni

proc export data=studenti

outfile="c:\users\naddeo\desktop\student"

dbms=dlm

replace;

run;

dove si è omessa l’indicazione del carattere di delimitazione e dove l’opzione “replace” fa sì che il

SAS sovrascriva l’archivio precedentemente creato.

In questo caso il file “student” avrebbe la forma seguente

sesso eta

m 23

f 19

m 18

m 22

f 25

f 26

14

3.5 La Proc SORT

Questa procedura esegue l'ordinamento dei record di un data set a seconda delle determinazioni (valori

numerici o stringhe alfanumeriche) assunte una o più variabili. Tale ordinamento, in base al codice

ASCII, per defatlt è effettuato in modo non decrescente

La sintassi è la seguente

PROC SORT DATA=<nome_del_dataset> <opzioni>;

BY [descending] <variabile/variabili>

dove l'istruzione “BY” indica la variabile o le variabili da considerare per l’ordinamento. Questa

istruzione deve essere necessariamente specificata. Quando si considerano più variabili, l'ordinamento

viene fatto a partire dalla prima.

L’opzione [descending] è necessaria quando si desidera un ordinamento a partire dalla

determinazione più alta fino alla più bassa (ossia in ordine decrescente o, più correttamente, non

crescente). Questa istruzione va inserita prima del nome della variabile di cui si vuole l’ordinamento in

modo non crescente.

L’opzione più utilizzata fra tutte quelle previste assume la forma

OUT = <nome_del_data_set>

e viene usata per specificare il nome del data set di uscita. In assenza di tale istruzione, il data set

ordinato si sovrappone a quello originale (se non sono stati commessi errori)

Esempio 3.5.1

Il seguente data set SAS “american_data”,

american_data.sas7bdat

15

che si trova nella directory “c:\users\naddeo\desktop”, contiene i dati relativi a:

- la ditta di alcune aziende americane (variabile “ditta”)

- i debiti espressi in migliaia di dollari (variabile “debito”),

- l’identificativo associato a ciascun cliente (variabile “numero_conto”) e

- la città in cui opera l’azienda (variabile “citta”)

Si vogliono ordinare i record presenti nell’archivio a seconda delle determinazioni assunte dalla

variabile “citta” e, all’interno di questa, a seconda delle determinazioni assunte dalla “ditta”, seguendo

in entrambi i casi l’ordine non decrescente.

Il file creato, di tipo temporaneo, dovrà essere denominato “city_company” e andrà stampato a

terminale, con le seguenti due righe di titolo:

Clienti indebitati

elencati in ordine alfabetico all'interno di ciascuna città

Le variabili dovranno inoltre comparire nell’ordine specificato qui di seguito: ditta, città, debito,

identificativo.

Un programma SAS che soddisfa queste richieste è il seguente

data origine;

set 'c:\users\naddeo\desktop\american_data.sas7bdat';

proc sort data=origine out=city_company;

by citta ditta;

proc print data=city_company;

var ditta citta debito ident;

title 'Clienti indebitati';

title2 'elencati in ordine alfabetico all''interno di ciascuna città';

run;

dove il dataset SAS viene letto utilizzando l’istruzione “set” seguita dal percorso e dal nome completo

del file.

L’output assume la forma

16

Clienti indebitati

elencati in ordine alfabetico all'interno di ciascuna città

Oss Ditta citta debito numero_conto

1 Apex Catering Apex 37.95 9923

2 Paul's Pizza Apex 83.00 1019

3 Peter's Auto Parts Apex 65.79 7288

4 Tina's Pet Shop Apex 37.95 5108

5 Watson Tabor Travel Apex 37.95 3131

6 Boyd & Sons Accounting Garner 312.49 4762

7 Deluxe Hardware Garner 467.12 8941

8 Elway Piano and Organ Garner 65.79 5217

9 World Wide Electronics Garner 119.95 1122

10 Ice Cream Delight Holly Springs 299.98 2310

11 Tim's Burger Stand Holly Springs 119.95 6335

12 Bob's Beds Morrisville 119.95 4998

13 Pauline's Antiques Morrisville 302.05 9112

14 Strickland Industries Morrisville 657.22 1675

Sulla base del medesimo dataset SAS si consideri ora un programma SAS che esegue l’ordinamento

dei record a seconda della variabile città (ordinata in senso crescente), del debito (in senso decrescente)

e dell’identificativo (in senso crescente).

Il file creato, di tipo permanente, dovrà comparire nella medesima directory del file originario ed essere

denominato “city_company1”. Dovrà stampato a terminale, con le seguenti due righe di titolo:

Clienti indebitati

elencati per città e valori decrescenti del debito

Le variabili dovranno inoltre comparire nell’ordine specificato qui di seguito: città, debito, ditta,

identificativo.

Un programma SAS che soddisfa queste richieste è il seguente

17

libname libreria 'c:\users\naddeo\desktop';

data origine;

set 'c:\users\naddeo\desktop\american_data.sas7bdat';

proc sort data=origine out=libreria.city_company1;

by citta descending debito ditta;

proc print;

var citta debito ditta numero_conto;

title 'Clienti indebitati';

title2 'elencati per città e valori decrescenti del debito';

run;

e il corrispondete output assume la forma

Clienti indebitati

elencati per città e valori decrescenti del debito

Oss citta debito ditta numero_conto

1 Apex 83.00 Paul's Pizza 1019

2 Apex 65.79 Peter's Auto Parts 7288

3 Apex 37.95 Apex Catering 9923

4 Apex 37.95 Tina's Pet Shop 5108

5 Apex 37.95 Watson Tabor Travel 3131

6 Garner 467.12 Deluxe Hardware 8941

7 Garner 312.49 Boyd & Sons Accounting 4762

8 Garner 119.95 World Wide Electronics 1122

9 Garner 65.79 Elway Piano and Organ 5217

10 Holly Springs 299.98 Ice Cream Delight 2310

11 Holly Springs 119.95 Tim's Burger Stand 6335

12 Morrisville 657.22 Strickland Industries 1675

13 Morrisville 302.05 Pauline's Antiques 9112

14 Morrisville 119.95 Bob's Beds 4998

18

3.6 Esercizi riepilogativi

Esercizio 3.6.1

Considerato il file excel “occup.xlsx” nella directory “c:\users\naddeo\desktop\” creare, nella medesima

directory, un data set SAS permanente di nome “occup_aosta” che contenga le sole osservazioni

relative alla Val d’Aosta e, per ciascun record, calcolare:

- il tasso di occupazione “tas_occ” (dato dal rapporto fra il numero di occupati e la popolazione di 15 o

più anni)

- il tasso di disoccupazione “tas_dis” (dato dal rapporto fra il numero di individui in cerca di

occupazione e le forze di lavoro)

- il tasso di attività “tas_att” (dato dal rapporto fra le forze di lavoro e la popolazione di 15 o più anni)

Stampare i soli risultati relativi alla denominazione e ai tre tassi.

Soluzione

Il programma SAS potrebbe assumere la forma

libname libr1 "c:\users\naddeo\desktop\";

proc import datafile="c:\users\naddeo\desktop\occup.xlsx" dbms=excel out=occup;

data libr1.occup_aosta; set occup;

if reg=2;

tas_occ = occupati/Popolazione_di_15_anni_o_pi_;

tas_dis = In_cerca_di_occupazione/Forze_di_lavoro;

tas_att = Forze_di_lavoro/Popolazione_di_15_anni_o_pi_;

proc print;

run;

e la stampa finale deve consistere nel seguente file

Oss Denominazione tas_occ tas_dis tas_att

1 AOSTA 0.49614 0.08474 0.54208

2 AYAS 0.51380 0.07401 0.55486

3 COURMAYEUR 0.54674 0.06363 0.58389

4 SAINT-VINCENT 0.48985 0.10040 0.54452

5 VALTOURNENCHE 0.54268 0.07898 0.58922

19

Esercizio 3.5.2

Il seguente data set SAS si riferisce a una classe di studenti inglesi su cui sono state rilevate le variabili

sesso (M = maschio, F = femmina), l’età, l’altezza in pollici e il peso in libbre.

Esprimere i dati relativi i dati relativi all’altezza in centimetri (tenendo presente che 1 pollice equivale a

2,54 cm.) ed i dati relativi al peso in chilogrammi (tenendo presente che 1 libbra equivale a circa

0,453592 kg.).

Esportare il file in formato delimitato (CSV file) in cui le colonne sono separate dal carattere “&”.

20

Soluzione proc export data=sashelp.class

outfile="c:\myfiles\class"

dbms=dlm;

delimiter='&';

run;

proc export data=sashelp.class

outfile="c:\myfiles\class"

dbms=csv;

if _n_ = 1 then do;

put "Nome" ' ' "Sesso" ' ' "Eta" ' ' "Altezza" ' ' "Peso";

end;

/*

29 format Name $8. ;

30 format Sex $1. ;

31 format Age best12. ;

32 format Height best12. ;

33 format Weight best12. ;

*/

21