Corso di Stata Elementi di Programmazione

Transcript

Corso di Stata Elementi di Programmazione
Accedere ai risultati
Macro
Cicli
Corso di Stata
Elementi di Programmazione
Nicola Tommasi
C.I.D.E.
Giugno-Luglio 2011
Università degli studi di Verona
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
1 / 16
Accedere ai risultati
Macro
Cicli
Introduzione
Quasi tutti i comandi salvano l'output prodotto o parti di esso sotto
forma di
1
2
3
Scalari numerici o stringa
vettori
matrici
Questi risultati si riferiscono sempre all'ultimo comando impartito
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
2 / 16
Accedere ai risultati
Macro
Cicli
output dei comandi
return list
command da eseguire
return list
. summ eta
Variable |
Obs
Mean
Std. Dev.
Min
Max
-------------+-------------------------------------------------------eta |
22268
41.20235
22.12469
0
103
. return list
scalars:
r(N) = 22268
r(sum_w) = 22268
r(mean) = 41.20235315250584
r(Var) = 489.502052216051
r(sd) = 22.12469326829303
r(min) = 0
r(max) = 103
r(sum) = 917494
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
3 / 16
Accedere ai risultati
Macro
Cicli
Output delle regressioni
ereturn list
comando di regressione
ereturn list
. ereturn list
scalars:
...
segue
Nicola
Tommasi
e(N)
e(df_m)
e(df_r)
e(F)
e(r2)
e(rmse)
e(mss)
e(rss)
e(r2_a)
e(ll)
e(ll_0)
(C.I.D.E.)
=
=
=
=
=
=
=
=
=
=
=
395
9
385
232.4094818295316
.8445502969911419
56.76810383548168
6740702.006307498
1240707.781034271
.8409164078298959
-2150.811313812844
-2518.444341781212
Elementi di Programmazione
C.I.D.E.
Giugno-Luglio 2011
4 / 16
Accedere ai risultati
Macro
Cicli
Output delle regressioni
macros:
e(cmdline)
e(title)
e(vce)
e(depvar)
e(cmd)
e(properties)
e(predict)
e(model)
e(estat_cmd)
matrices:
:
:
:
:
:
:
:
:
:
"regress api00 ell meals yr_rnd mobility acs_k3 acs_46 full
"Linear regression"
"ols"
"api00"
"regress"
"b V"
"regres_p"
"ols"
"regress_estat"
e(b) : 1 x 10
e(V) : 10 x 10
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
5 / 16
Accedere ai risultati
Macro
Cicli
Usare i risultati
Come usare i risultati
1
2
Direttamente subito dopo il comando
Salvati in local per un uso successivo
I risultati si riferiscono sempre all'ultimo comando usato
Quindi l'ultimo comando usato sovrascrive il precedente
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
6 / 16
Accedere ai risultati
Macro
Cicli
Tipi di macro e assegnazione
Tipi di macros:
1
2
local
global
Assegnazione del contenuto
1
2
3
4
local A 2+2
local B = 2+2
global A 2+2
global B = 2+2
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
7 / 16
Accedere ai risultati
Macro
Cicli
Richiamo delle macro
Richiamare le macros:
le local si richiamano con l'espressione `local_name'
le global si richiamano con l'espressione $local_name
Il simbolo ` si ottiene premendo ALT + 96 sul tastierino numerico
Attenzione però:
. di
4
. di
4
. di
2+2
. di
4
`A'
(local A 2+2)
`B'
(local B = 2+2)
"`A'"
"`B'"
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
8 / 16
Accedere ai risultati
Macro
Cicli
Scalari
scalar: Oggetto usato per assegnare valori numerici scalari
Come si costruisce
scalar dene
scalar
define
scalar_name =exp
Poi può essere usato come se fosse una variabile:
scalar w=5
scalar q=3
scalar t=w+q
di t
8
Nicola Tommasi (C.I.D.E.)
C.I.D.E.
Elementi di Programmazione
Giugno-Luglio 2011
9 / 16
Accedere ai risultati
Macro
Cicli
I cicli
Denizione: procedure che permettono di compiere azioni ripetitive
Sintassi:
foreach
foreach
lname {in|of listtype} list {
commands referring to `lname'
}
forvalues
lname = range {
commands referring to `lname'
forvalues
}
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
10 / 16
Accedere ai risultati
Macro
Cicli
Metodi di implementazione
Sono possibili le seguenti costruzioni di foreach:
I costruzione
foreach
lname
in
any_list
....
lista di comandi
{
}
any_list è una qualsiasi lista di variabili, stringhe e numeri
II costruzione
foreach
lname
of local
lmacname
....
lista di comandi
{
}
lmacname è una local precedentemente specicata
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
C.I.D.E.
Giugno-Luglio 2011
11 / 16
Accedere ai risultati
Macro
Cicli
Metodi di implementazione
III costruzione
foreach
lname
of global
gmacname
....
lista di comandi
{
}
gmacname è una global precedentemente specicata
IV costruzione
foreach
lname
of varlist
varlist
....
lista di comandi
{
}
varlist è una serie di variabili già esistenti
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
C.I.D.E.
Giugno-Luglio 2011
12 / 16
Accedere ai risultati
Macro
Cicli
Metodi di implementazione
V costruzione
foreach
lname
of newvarlist
newvarlist
....
lista di comandi
{
}
newvarlist è una lista di nuove variabili
VI costruzione
foreach
lname
of numlist
numlist
....
lista di comandi
{
}
numlist è una lista numerica
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
C.I.D.E.
Giugno-Luglio 2011
13 / 16
Accedere ai risultati
Macro
Cicli
Esempio commentato
Dato in seguente ciclo:
. foreach obj in var1 var2 var8 var10 {
2. summ `obj'
3. gen `obj'_10 = `obj' / 10
4. summ `obj'_10
5. }
Vediamo di capire cosa succede:
Nota che obj diventa a tutti gli eetti una local
primo ciclo (`obj' assume il valore var1):
summ `obj'
-> summ var1
gen `obj'_10 = `obj' / 10 -> gen var1_10 = var1 / 10
summ `obj'_10
->
summ var1_10
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
14 / 16
Accedere ai risultati
Macro
Cicli
Esempio commentato
. foreach obj in var1 var2 var8 var10 {
2. summ `obj'
3. gen `obj'_10 = `obj' / 10
4. summ `obj'_10
5. }
secondo ciclo (`obj' assume il
summ `obj'
->
gen `obj'_10 = `obj' / 10 ->
summ `obj'_10
->
valore var2):
summ var2
gen var2_10 = var2 / 10
summ var2_10
terzo ciclo (`obj' assume il valore var8):
summ `obj'
-> summ var8
gen `obj'_10 = `obj' / 10 -> gen var8_10 = var8 / 10
summ `obj'_10
->
summ var8_10
quarto ciclo (`obj' assume
summ `obj'
gen `obj'_10 = `obj' / 10
summ
`obj'_10
Nicola
Tommasi (C.I.D.E.)
il valore var10):
-> summ var10
C.I.D.E.
-> gen var10_10 = var10 / 10
-> Elementi
summ di
var10_10
Programmazione
Giugno-Luglio 2011
15 / 16
Accedere ai risultati
Macro
Cicli
forvalues
Inne la costruzione del ciclo forvalues utile per successioni numeriche
forvalues
lname = range {
commands referring to `lname'
forvalues
}
dove range può assumere le seguenti congurazioni:
# 1 (# d )# 2 : lname assume valori da # 1 a # 2 con passo pari a # d
# 1 /# 2 : lname assume valori da # 1 a # 2 con passo pari a 1
# 1 (# t ) to # 2 : lname assume valori da # 1 a # 2 con passo pari a # t - # 1
# 1 (# t ) : # 2 : idem come sopra
C.I.D.E.
Nicola Tommasi (C.I.D.E.)
Elementi di Programmazione
Giugno-Luglio 2011
16 / 16