Insegnamento Analisi Statistica del Reddito e delle Condizioni di Vita
SAS - STATISTICAL ANALYSIS SYSTEM Uso di SAS per le analisi statistiche
A cura di
Laura Neri, Francesca Gagliardi, Gianni Betti
Dip. di Economia Politica e Statistica, Università degli Studi di Siena
DO Blocks and DO Loops
• Un “DO block” inizia con la parola riservata DO e si conclude con la parola riservata END.
• Lo statements che sta all’interno del DO..END è definito “block”.
• Il DO..END costrutto costituisce un importante strumento per raggruppare statements all’interno di uno DATA step.
• data two; set prova;
• if age ne . then do;
• age2 = age*age;
• age3 = age2*age;
• end;
• run;
• GENERAZIONE DI NUMERI CASUALI
• Un numero casuale è un numero scelto da un insieme di valori egualmente probabili, cioè un numero estratto da una distribuzione uniforme;
• in una sequenza di numeri casuali ogni numero estratto deve essere statisticamente indipendente dagli altri.
• I numeri casuali sono utili in vari casi:
• Generazione di dati cifrati e password
• Simulazione e modellazione di fenomeni complessi
• Selezione di campioni casuali
COME GENERARE NUMERI CASUALI
• È possibile generare numeri casuali con un computer?
• Sì, ci sono 2 approcci:
• o Generatori di numeri pseudo-casuali
• o Generatori di numeri casuali veri (da fenomeni fisici, p.e. gli istanti temporali in cui accade qualcosa di totalmente imprevedibile).
•
• GENERAZIONE DI NUMERI PSEUDO-CASUALI
• Gli algoritmi per la generazione di numeri pseudo-casuali utilizzano formule matematiche o tabelle pre-calcolate per
• produrre sequenze di numeri che sembrano casuali.
• Gli algoritmi oggi disponibili sono buoni e i numeri generati sono come quelli realmente casuali.
GENERAZIONE DI NUMERI PSEUDO-CASUALI IN SAS
• Le funzioni e le routine di SAS per la generazione di numeri casuali producono sequenze di numeri partendo da un valore iniziale seed.
• Il seed deve essere un intero non negativo minore di 231-1.
• È sempre possibile riottenere la successione di numeri casuali utilizzando lo stesso DATA step.
• Se si usa il valore zero come seed è l’orologio di sistema che inizializza la sequenza, in tal caso la sequenza di numeri casuali non è replicabile.
• Il seed può essere una costante intera o una variabile che contiene la costante intera. La variabile seed deve essere inizializzata prima della prima esecuzione della funzione o della CALL routine.
•
FUNZIONI SAS PER LA GENERAZIONE DI NUMERI PSEUDO-CASUALI
NORMAL normale standard RANNOR normale standard RANBIN binomiale
RANCAU Cauchy
RANEXP esponenziale standard RANGAM gamma standard
RANPOI Poisson
RANTBL distribuzione discreta RANTRI distribuzione triangolare RANUNI uniforme (0,1)
UNIFORM uniforme (0,1)
Consideriamo la Distribuzione Uniforme in (0,1).
RANUNI FUNCTION RANUNI(seed)
RANUNI ROUTINE
CALL RANUNI(seed,x);
data prova;
Seed_1 =45; Seed_2= 45; Seed_3= 45;
/*Seed_1 =44; Seed_2= 4; Seed_3= 4;*/
do i=1 to 10;
call ranuni(Seed_1,X1);
call ranuni(Seed_2,X2);
X3=ranuni(Seed_3);
output;
end;
run;
Creazione di una macro SAS
• Un programma macro in SAS inizia sempre con lo statement %macro seguito dal nome della macro, e finisce sempre con lo statement %mend.
• Per vedere meglio una macro, creiamo dei file di esercizio, file1 - file4.
• data file1 file2 file3 file4;
• input a @@;
• if _n_ <= 3 then output file1;
• if 3 < _n_<= 6 then output file2;
• if 6 < _n_ <= 9 then output file3;
• if 9 < _n_ <=12 then output file4;
• cards;
• 1 2 3 4 5 6 7 8 9 10 11 12
• ;
• run;
• data all;
• set file1 file2 file3 file4 ;
• run;
• Come costruire lo stesso programma con una macro ?
• Un macro program per ripetere una procedura più volte consecutivamente
• Ipotizziamo di voler effettuare 5 procedure logistiche su 5 diverse variabili risposta v1-v5 in funzione di 2 regressori ind1 e ind2.
• Potremmo scrivere 5 programmi diversi, cambiando di volta in volta il nome della variabile dipendente.
• OPPURE usare una marco SAS
SAS/IML software
• La procedura IML permette di convertire un SAS data set in una matrice, e quindi di effettuare operazioni per riga,
colonna, o per cella
• proc iml;
• x={1 2 3, 4 5 6};
• print x;
• varnames='x1':'x3';
• /* creates data set MYDATA with variables X1, X2, X3 */
• create mydata from x [colname=varnames];append from x ;close mydata;
•
• quit;
* Costruzione di HY020: reddito totale familiare disponibile (netto);
* Costruzione scala di equivalenza OECD 50-30;
/* CONSTRUCTION of HY020: Total disposable household income (p.111 documento pdf) The sum for all household members of gross personal income components (gross employee cash or near cash income (PY010G); gross non-cash employee income (PY021G); gross cash benefits or losses from self-employment (including royalties) (PY050G); unemployment benefits (PY090G); old-age benefits (PY100G); survivor' benefits (PY110G), sickness benefits (PY120G); disability benefits (PY130G) and education-related allowances (PY140G)) plus gross income components at household level: income from rental of a property or land (HY040G); family/children related allowances (HY050G); social exclusion not elsewhere classified (HY060G); housing allowances (HY070G); regular inter-household cash transfers received (HY080G); interests, dividends, profit from capital investments in unincorporated business (HY090G); income received by people aged under 16 (HY110G)) minus; regular taxes on wealth (HY120G); regular inter-household cash transfer paid
(HY130G); tax on income and social insurance contributions (HY140G)).
*/