Sei sulla pagina 1di 70

Lezioni sas

Lez 1 2/11/20
Per creare un data set provvisorio (dato dalla parola “work”) nominato prova
Scrivere
Data work.prova;
e lo voglio prendere da lab_sas.lux_h_files
run;
quindi ogni data set è dato dal nome delle libreria. Nome del file (work.prova)
prova lo abbiamo inventato noi, mentre lab_sas.lux_h_files è un nome specifico che c’è, è la libreria dove si
trova il file lux_h_files.

Quindi ha creato un nuovo data file chiamato work.prova, ovvero di nome prova che si trova nella directory
work dove ho duplicato il file lux_h_file che già esisteva,

proc means data=prova;


var hx090;
run;
in questo modo faccio una media semplice della variabile reddito familiare totale (hx090)
Se mando in esecuzione questo pezzettino ho

ho la finestra dei risultati , infatti SASRESULTS dà i risultati di ogni procedura eseguita.

Se io chiudo il sas il pezzo di programma scritto fin qui


Data work.prova
lab_sas.lux_h_files
run;

proc means data=prova;


var hx090;
run;
LO PERDO perché non me lo sono salvato da qualche parte.
Salva con nome e vai nella directory che vogliamo (es corso sas) e lo nomini provacorsosas2020
Poi se voglio scrivere delle cose, e salvarle devo cliccare sull’icona col dischetto floppy e le salva, l’asterisco
sta ad indicare che ancora non è salvato.

Voglio fare una regressione, vai su ? e guida documentazione sas , se io voglio fare una regressione scrivo
regression, gli do invio e mi dice tutte le cose che ha trovato dove ha trovato la parola regression
Se scrivo procedure regression mi dà la proc reg che è la procedura che ci sereve per fare la regressione
Se io volessi mettere in relazione il mio reddito con altre variabili , faccio
Proc reg data=prova;
model hx090 = hx050
ho regredito il mio reddito hx090 con la scala di equivalenza hx050

Run;
Per sas il dato mancate è il “.”
Per creare una nuova libreria fare click su nuova libreria
Ci metto il nome e la collego fisicamente a desktop.
Se cerco trovo la mia directory prova, se ci clicco è vuota, se vado su proprietà

Cioè ho legato il cognome “prova” a questa cosa qui.


Se ora io vado nel programma e gli dico
Data prova.gianni sto creando un data set che si chiama gianni e lo metto nella directory prova, cioè nel
desktop, perché la directory prova di sas corrisponde fisicamente al desktop del computer
Cosa ci metto? Ci metto prova
set prova
che cos’è prova? È il mio data set e lo lancio
Il sas mi dice che ha creato un nuovo data set che si chaima prova.gianni e che ha 4766 osservazioni e 218
variabili
la definizione di libreria si può fare anche in un altro modo, attraverso il program editor
LIBNAME “nome della mia libreria” e gli devo dare anche qual è la directory che lui trova nel mio computer

“E:\” è il mio path .


Stai attento con le virgolette o apostrofi e gli spazi. Le virgolette dovrebbero essere giuste.
Da casa metti C al posto della directory E

Quando mi creo una nuova libreria, c’è un’opzione “attiva all’avvio”


Se io non la clicco, vuol dire che la libreria che sto creando , una volta che esco da sas mi sparisce.
Però avendola salvata in desktop la riprendo. La libreria che avevo creato in modo manuale non ce l’ho più,
perché me l’ero creata solo in quel momento, e anche la prova 2 non ce l’ho perché me l’ero creata
attraverso un programma. Però fisicamente io avevo salvato in desktop

Quindi anche se poi ho interrotto il collegamento fisico fra sas libreria prova e la directory desktop, però io
ce l’avevo salvato.

Lezione 2 sas 9/11/20

Data è l’istruzione dove va a mettere i nostri dati e set è invece da dove li va a prendere
C’è il primo modo , che si fa prendendo dall’esterno
Il secondo

Nel secondo metodo (quello evidenziato nella foto) attenzione a dove mettiamo il ;
lo ha messo nella riga successiva, se io il ; lo metto al termine di questa riga, non va bene
nel terzo metodo al posto di datalines puoi mettere cards
Invece di dire che il codice va dalla colonna 1 alla 3, scrivendo 3. Si dice che codice ha 3 cifre.
Il simbolo @i indica di spostare indica al puntatore di spostarsi alla colonna i
il $ sta ad indicare che è un carattere, il +1 sta ad indicare che c’è uno spazio, l’anno è numerico e ha
lunghezza 2, +1 perché c’è uno spazio data ddmmyy (il sas parla inglese),+1 e punteggio da 1 (del primo
giudice trattino (quindi comprende i numeri nel mezzo , cioè punt1-punt5 è = a dire
punt1,punt2,punt3,punt4,punt5) fino al punteggio del terzo giudice,

L’anno 00 me lo considera 0, la data mi sa che la considera come numero di giorni a partidre da una certa
data
A noi questa situazione non piace tantissimo e quindi vado ad inserire il formato
3 DIVERSI FORMATI
1) dove inserisco i numeri del giorno mese e anno
2) scrivo mese e l’anno
3) i 2 giorni, mesi e anno
Attraverso il format possiamo andare a stampare/evidenziare la nostra data con formati diversi.
Il terzo lo posso congelarlo come se fosse un commento con * e /
Mi prende il */marca anno*/ come un commento e quindi non me lo manda in esecuzione, come se non ci
fosse
Infatti marca e anno sono congelati e non si vedono

Quindi i commenti li posso inserire in questo modo

 * Ecc ; se questo è un commento all’esterno di una istruzione


 Oppure scrivere

Con /* ecc*/
/* per iniziare e */ per finire

Quindi il sas dopo che ha letto genere e peso, sa che le informazioni che trova dopo sa che sono della
osservazione successiva
lo lancio e ottengo
Doce che ha creato un file temporaneo che si chiama un record che ha non 2 ossevazioni perché avevo 2
record , ma ben 6 perché ho detto che con @@ finisce il record

Questo data set invece di riportare solo le ultime 2 cifre dell’anno, anziché di 00 e quindi il sas legge solo 0,
abbiamo 2000
Il sas si aspettava di leggere attraverso l’input 6 variabili, quindi legge le 4 osservazioni più le prime 2
osservazioni della riga successiva e gli ultimi 2 della riga 2 li tralascia. E riparte allo stesso modo dalla riga
successiva.

Lezione 3 del 11/11/2020


Oggi vediamo come funziona la istruzione PUT per scrivere sulla finestra di output il data set
Nel file di output vedo che la lista del comune di siena è questa lista qua, che sono le osservaz 11,12,13…
Mentre quella di firenze eè l’altra
Quindi è possibile stampare delle informazioni.

IMPORTAZIONE/ESPORTAZIONE AUTOMATICA DI DATI


Noi vogliamo importare un file excel, questo file excel contiene il tracciato record dell’indagine istat sui
consumi delle famiglie, (household budget survey), per l’italia è impo dato che la stima della povertà per
scopi interni si basa su questa.
Data set fa riferimento alla sola regione toscana.

Quindi andiamo su fileimporta dati


questa finestra ci permette di importare da qualunque formato.
Poi ci chiede :”dove è il data set che vogliamo importare in sas?”
Il prof ce l’ha nella directory corso sas…
Poi okavanti
Poi sas gli chiede , dove lo vuoi mettere? Qual è il cognome (ovvero la libreria) e qual è il nome del file?

Dato che a me non interessa salvarlo in modo definitivo lo lascio in work, gli do un nome,
apro work, e apro consumi_toscana
e ho i dati dei consumi delle famiglie toscane
Se io voglio fare una proc contents del mio file report,
scrivo

Senza specificare niente invece ottengo la proc contents del consumo toscana. Fa riferimento all’ultimo
data set creato.
Betti consiglia di specificare il data set che vogliamo, data set= report
Quando non vado a specificare, il data set in automatico mi prende in considerazione l’ultimo data set che
ho creato.

Se io invece lansio tutte e due le istruzioni

Dato creo ho ricreato l mio data set report, allora quando faccio la proc contents fa riferimento a questo
Lui comunque consiglia di inserire il nome della proc a cui si fa riferimento
se nelle opzioni ci mettiamo il by andiamo ad ordinare o in modo decrescente rispetto a una particolare
variabile, oppure possiamo mettere l’opzione pageby, ovvero andando a specificare delle pagine sulle quali
vogliamo stampare la nostra informazione
Con sumby, ad es vogliamo stampare dei dati e ne vogliamo anche fare la somma. Oppure possiamo usare
anche altre opzioni

Nel primo caso andiamo a stampare solo alcune osservazioni , dalla 5 fino alla decima , ma non di tutte le
variabili che abbiamo nel data set, ma solo quelle per numero di componenti, sesso e età
(sumby) Ultima colonna spese in bar, in lire, e mi somma anche le spese nei bar per queste prime 10
famiglie.
Che cosa vogliamo fare? Vogliamo leggere un data set che noi chiamiamo segreteria, che questo data set
contiene le informazioni sull’identificativo (1,2,3,4), il genere che è nella terza colonna (mffm) che sappiamo
essere carattere perché abbiamo il $, poi abbiamo la variabile dummy ricovero (si no), e poi abbiamo le
informazioni sulle analisi.
Vogliamo attaccare dei format, perché vogliamo dire che m ha un format che corrisponde a maschio e f che
è femmina. Questo lo faccio attraverso value $genere
E invece il valore dellle nostre analisi si no , 1 è sì e il 2 è ilno, sia per quanto riguarda il ricover, sia per
quanto riguarda l’analisi.
Andiamo in sas e facciamolo

Poi vado a crearmi il mio data set segreteria e lo lancio


Se lo vado ad aprire , invece dei valore mffm ecc, in segreteria ho informazioni più facilmente leggibili.
se io faccio una proc print su questo data set ottengo
È possibile gestire i nostri data set attraverso altre istruzioni
Una è la label, ovvero altre etichette a le nostre variabili, rinominare le variabili, mantenere delel variabili e
drop escludere delle variabili.
La label ci permette di dare delle etichette, mettendo una sorta di commento , posso chiamare un
repressore x1 e nella mia etichetta scrivo x1 sono il numero degli anni di studio,
il rename è impo, perché magari nel mio modello di micro simulazione mi voglio costruire un modello, ma
talolta tali variabili sono semplicemente delle variabili che io ho rilevato nella mia indagine ma le voglio
chiamare in modo diverso,
keep e drop, ho data set con molte variabili, per non appesantire il sas posso portarmi dietro le variabili che
mi interessano e posso usare il keep o il drop.
Mi creo un dataset che è permanente, attraverso la library lib. Ma poi mi creo un nuovo data set dove
prendo solo alcune variabili (keep ), e prendo la relazione col capofamiglia (cioè con sé stesso, ) la sua
genere…
Do delle etichette per es (sesso1 dico che è il sesso del capofamiglia, ecc
Rename se sso non mi piace ma lo voglio rinominare genere..

Esempio
Io non ho la libreiria lib

Quindi me la devo creare.


Creo la libreria lib e la associo nel mio portatile alla directory C betti….
La lancio

Ho creato la libreria lib e ci copio il mio file temporaneo


E lo creo
Lancio il programma e mi sono reato un nuovo data set temporaneo, vado in work, si chiama info capof ,
dove mia spetot di trovare solo 7 variabili,ed è così.
La variabile sesso1 non ce l’ho più perché l’ho rinominata

È possibile all’interno di un programma assegnare a dellel variabili dei valori oppure fare delle operazioni
Operatori (possono essere somme , funzioni eccetera). Di tipo aritmetico (somma esponenziale
logaritmico ) di comparazione (essere più piccolo di , = a ecc) ecc
Ci solo delle regole (prima le moltriplicaz e poi le somme) anche qui c’è un certo ordine, abbiamo 7 livelli di
priorità.
l’elevamento a potenza ha 1 livello di priorità, ecc

Operatori di comparazione, fanno il confronto fra 2 operandi, generano un valore numerico


fai qualcosa (if) se succede qualcos’altro (then)

Mi creo un nuovo data set e lo chiamo (info capofamiglia 1), e prendo i dati originari da info capofamiglia
Es se io mi volessi stimare un modello di regressione, e invece di stimare l’età, so che è significativa l’età al
quadrato, creerò l’eta squared, e l’età al quadrato sarà età^2 oppure età*età
Oppure stato civile sarà = a stato civile
Se stato civile era = a 3 oppure se era =4 o =a 5 allora lo stato civile ricodificato è = a 3, quindi ricodifico le
variabili 3 4 5 della variabile originaria nella cateogria 3 dello stato civile ricodificato.
Titolo di studio lo voglio ricodificare
Se titolo di studio era in 1,2,3 allora ricodificato mi metto in 1
In sas io andrò a creare un nuovo data set dove faccio tutte queste operazioni comparazioni

Ho generato dei missing values, e ho creato un nuovo data set che ha lo stesso numero di osservazioni e 11
variabil.
mi sono creato la età^2 , lo stato civile ricodificato
Le variabili 4, 444 (quarta colonna)me le mette nella 3 (nona colonan)
Il titolo di studio me lo mette il titolo di studio ricodificato avrà nella

Aveva congelato il where


Ora vuole creare un data set dove vao a prendermi solo le osservazioni per le quali la variabile dip1 è = a 1
Se lancia il pezzo e va nel log
Crea capofamiglia2 leggendo su capofamiglia1 dove la variabile dip1 è=a 1
Quindi vuole prendere solo quelli che hanno la dummy= a 1
quindi dal grande data set consumo toscana mi sono creato un picoclo data set dove ho solo 11 variabili e
484 osservazioni dei capofamiglia che svollgono lavoro dipendente.

Lezione 4 16/11
Quando utilizziamo la proc sort dobbiamo specificare attraverso il by la variabile o le variabili per le quali
dobbiamo ordinare il nostro data set.
Con descending l’ordinamento è decrescente. Se non scriviamo niente è in forma ascendente.
È possibile memorizzar un nuovo data set attraverso l’opzione out, cioè creare un file di output

Andiamo a riprendere i data set che avevo la settimana scorsa.


Mi ricreo la libname e il file consumo toscana. Mi creo il file info capofamiglia 1 e creo delle variabili e delle
label come settimana scorsa. Creo il file uomini e donne e il file 1 e 2 .

Non ci sono errori, nella mi libreria work ho consumo toscana donne uomini info…
Semplice ordinamento se io apro infocapofamiglia1 ho questo file

Di 1284 osservazioni e eta 1 non è ordinato. Se il lo chiudo e faccio girare l’ordinamento semplice, non mi
sostituisce il file ma lo ordina in funzione dell’età del capofamiglia.
Il sas considera i missing come valori che tendono a – infinito e quindi sono più piccoli di qualsiasi altro
numero.

Ora ordiniamo per 2 variabili. Crea un nuovo data set ordinato, chiamato “sorted”
Sorted è ordinato inizialmente per il genere (individui che non hanno risposto poi genere 1 e poi genere 2)

L’istruzione set vuol dire che mi inserisce uno dopo l’altro in modo verticale i miei data set , quindi il
numero delle mie osservazioni si sommano,
set uno due
andrò a mettere verticalmente prima il data set 1 e poi il 2

Ho creato tot dove ho inserito nelle prime 2 riche ciò che conteneva nel data set 1, mentre nella riga 3 e 4
vado a mettere ciò che avevo nel data set 2
MERGE
Ci permette di fondere, di concatenare in modo orizzontale 2 data set
Noi di solito facciamo un match merging attraverso il by, ovvero facciamo un merge utilizzando un certo
identificativo e per fare questo dobbiamo ordinare by

Nel data set 1 noi vogliamo costruire un identificativo (k) e una variabile (x)
Nella “ “ 2 “ “ “ “ “ (k) e una var (y)
Li lancio
Quando faccio il merge e lo lancio, il log non mi dà errori ma se vado a lanciare e apro il tot, l’identificativo k
me lo prende una volta sola
E mi prende la variabile identificativo che trova per ultima.
Ho fatto un errore logico, per correggerlo dovrò prima ordinare entrambi i miei dataa set

E a questo punto potrò fare un merge by la variabile k e ora il mio tot sarà ordinato il mio identificativo e x e
y saranno corrispondenti e quindi ho creato in modo corretto il mio data set
Quando facciamo il merge e dato che vogliamo mettere insieme dei file che provengono da logiche diverse
(file familiare, file individuale ecc…) i quali possono essere concatenati con l’identificativo della famiglia,
allora dobbiamo sempre fare la proc sort per l’identificativo e poi un data merge attraverso il by che
prende in considerazione proprio questo identificativo.

ANALISI DEI DATI


La proc freq fa delle distribuzioni di frequenza di tutte le variabili che sono presenti nell’ultimo data set che
abbiamo utilizzato. Se invece vogliamo specificare un particolare data set dobbiamo scriverlo ( proc freq
data = library.pippo)
La proc. Contents ci fornisce delle info sul contenuto delle variabili.
Io qui mi voglio creare delle nuove classi. Se l’età è < a 25 va nella classe 1, ecc
Ho sfruttato l’if then
Less then
Less equal

Attraverso proc format assegnerò che 1 è occupato, 2 …


Poi faccio delle proc freq della condizione professionale, della età in forma di classi
E anche della condizone professionale una volta creata la variabile condizione professionale

La proc contents mi fa vedere le mie variabile non in ordine alfabetico ma in ordine di come io le ho nel
data set
Poi mi creo questo nuovo data set
Erano 65 variabili e ora 64 perché ho creato il mio age class
Poi

Creo il format per la formazione professionale,


poi lancio le mie varie proc freq
La prima è la condizione professionale e ho 1-9 e non conosco bene
Poi le age class

Poi dato che in qualche modo avevo creato delle etichette per la condizione professionale, faccio una proc
freq utilizzando il format
Ho la stessa distribuzione ma ora so che 1 è occupato, 2 disoccupato ecc

Andiamo a vedere come è possibile ponderare le nostre distribuzioni di frequenza


Otteniamo che per i maschi abbiamo = e per le femmine
Abbiamo corretto la nostra distribuzione attrverso la postcalibrazione

Con il primo pezzo assegno le etichette


Poi gli attribuisco i format
Per vedere posso anche andare nel mio explorer temporaneo e apro prova, visulazizazione etichette,
E infine faccio la proc freq chiedendo le 4 tabelle
Otterrò il sesso anziché di avere 1 e 2 avrò maschio e femmina
Nel primo caso la distribuzione di tt le categorie che non siano missing dà somma 100
Nel secondo caso essendo i missing una modalità a tutti gli effetti la somma delle % di tutte le altre modalità
non ci darà il 100%, ma ci darà il 100% - la % della modalità missing.
Ovvero noi vogliamo vedere “c’è una relazione tra essere capofamiglia maschio o femmina e la
macroregioneӓ?
Ovvero è vero che nel nord italia ci sono più capofamiglia maschi o femmina rispetto al centro o al sud
italia?
Andiamo a vedere

Facciamo una proc freq sesso e regione, utilizzando i format … non stampando le righe
Rispetto al caso precedente dove avevamo i valori assoluti e poi avevamo delle marginali avevamo la
somma per riga e con le %
Ora abbiamo un’informazione in meno
Non abbiamo le nostre % per riga e quindi nel nostro output abbiamo solo 3 informazioni
Poi ci fa il test del chi quadrato dove l’ipotesi nulla è quella che non ci sia associazione tra el 2 variabili e
questa invece la andiamo a rifiutare ha una prob molto alta
Quindi c’è un’associazione fra le nostre distribuzioni

Se lanciamo questa proc freq stables vogliamo vedere se c’è un’associazione anche in questo caso
Anche in questo caso c’è un’associazione anche se il sas dice “attenzione noi abbiamo almeno il 45%
(ovvero l’incrocio tra le 20 regioni e numero di componenti) ha un numero di counts < di 5.
Quindi il sas ci suggerisce di diminuire il numero di celle della nostra
Questo es l’ha fatto per farci vedere che quando vogliamo calcolare delle misure di associazione, ma il
numero di variabili è troppo grande, rischiamo che all’interno delle celle abbiamo un numero troppo
piccolo di associazioni, e quindi dobbiamo accorpare le nostre modalitàle regioni da 20 vanno a 3
macroregioni e le componenti da 10 vanno a 5 perché la quinta ingloba tutte le famiglie che hanno da 5 a
10 componenti.
Lezione 5 17/11

L’istruzione out out ci permertte di salvare risultati non solo della proc freq ma anche di qualsiasi
operazione.
la proc means può essere fatta by ovvero per modalità di una certa variabile o di tante variabili queste
variabili possono essere ordinate in maniera crescente per default o ecrecente scrivendolo.

Rilancia le cose viste ieri


Poi
Ci costruiamo i pesi in fuzione del genere

Poi lancia la prima proc means


Sono il consumo di elettricità e i dati missin
Calcolando le 2 medie pesate otteniamo gli stimatori corretti, leggermente più piccoli.

Se vado in log c’è un errore perché non trova questo formato


ha generato un output ma N=1
Strano fino alla procedura precedente noi avevamo più di 20000 famiglie.
Vado nel log, mi dà errore
Il data set temporaneo prova non è ordinato in una sequenza crescente. Il sas ha preso il primo elemento e
poi si è fermato preche non ha più trovato i dati ordinati.

Quindi io prima dovrò ordinare i miei dati per questa variabile e poi effettuo la proc means
ora ho la proc means disaggregata epr le 3 categorie perché oltre che ai maschi e femmine io ho dei casi nei
quali il genere è mancante.

Proc means data= prova Nmean median cv noprint


Attraverso noprint il sas non ci stampa quello che io voglio sulla finestra di outuput ma semplicemente dato
che io gli ho dato output out me lo salva in indici dove ci mette il numero di osservazione per gas e acqua,
poi la media e poi mi salvo la mediana e il coefficiente di variazione delle 2 variabili.
Tutti questi nomi li ho decisi io, i nomi in blu sono decisi dal sas
Quindi innanzitutto faccio girare il pezzo della proc means con il class

otteniamo delle informazioni per i maschi e per le femmine in un’unica tabella

Come è possibile importare i dati è possibile anche importarli


Per default il sas me li esporta in excel
Per vedere se ho esportato bene vado nel log e

mi dice il fil e c 20 didattica è stato creato con successo.

La proc uni variate è un popiù complessa, perché ci dà molte più informazioni.


Mentre la proc means è usata per avere un numero molto basso di indici, con la proc uni variate abbiamo
una visione generale della distribuzione della variabile.

con il PLOT
Proc plot

Proc reg interessante per chi vuole analizzare in ambito economico


Ha delle opzioni e bisogna specificare il modello
Il nome della variabile dipendente = repressori

Potrebbero piacerti anche