Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami...

28

Transcript of Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami...

Page 1: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Programação Stata

Henrique Neder1

1Instituto de EconomiaUniversidade Federal de Uberlândia

Henrique Neder Programação Stata

Page 2: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Sumário

1 Introdução

2 Veri�cações em arquivos: o comando assert

3 Indexação

4 Macros

5 Rami�cações e loopings

Henrique Neder Programação Stata

Page 3: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Introdução

Esta apresentação é baseada no material do NetCourse151 AnIntroduction do Stata Programming da Stata Corp LP

Henrique Neder Programação Stata

Page 4: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Introdução

Inicialmente vamos criar um diretório chamado lecture1 e salvarneste diretório alguns arquivos através dos seguintes comandos:cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/CURSO PROGRAMACAO STATA"mkdir lecture1cd lecture1run http://www.stata.com/courses/nc151-10/lec1.dodisplay "Hello, world"do crcars1

Henrique Neder Programação Stata

Page 5: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Primeiro método: o do�le

DO-FILE: hello.dodisplay "Hello, world"exit==============Digite na linha de comandos:do hello==============O Stata executa o seguinte comando:display "Hello, world"==============Aparece na janela de resultados:Hello, worldend of do-�le

Henrique Neder Programação Stata

Page 6: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Segundo método: o comando program interativo

Digite, interativamente, os seguintes comandos na linha decomando:program hello1. display "Hello, world"2. endO Stata armazena na memória de programas o programadenominado hello.Digite na linha de comandos:helloAparece na janela de resultados:Hello, world

Henrique Neder Programação Stata

Page 7: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Terceiro método: programa em um do�le

DO-FILE: hello.doprogram hellodisplay "Hello, world"endexit==============Digite na linha de comandos:program drop hellodo hello==============O Stata não executa nada. Apenas armazena o programa hello namemória de programas. Para executar o programa:hello

Henrique Neder Programação Stata

Page 8: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como fazer veri�cações em arquivos - comando assert

Construa a seguinte sequência de comandos em um do�le chamado ver1.do:capture log closelog using ver1, replaceset more o�* The documentation says make and model* is a string and implies it is always de�ned:assert mandm != ""* documentation implies price is always de�ned.assert price<. & price>0* Normally, I would not include all these comments.* Continuing ...assert mpg<. & mpg>0assert foreign==0 | foreign==1assert weight<. & weight>0assert displacement<. & displacement>0log closeexit

=============================Execute agora o comando:do ver1

Henrique Neder Programação Stata

Page 9: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Indexação

Quando executamos o comando:generate age2 = age*ageÉ como se o Stata executasse o seguinte loop:for each observação nos dados {generate age2 = age*age na observação corrente}Quando executamos o comando:generate y = x[1]É como se o Stata executasse o seguinte loop:for each observation in the data {generate y = a primeira observação em x}Os dois seguintes comandos são equivalentes:generate y = x[_n]generate y = xO comando:generate y = x[_n-1]Gera observações defasadas de x com y[1] igual a missing

Henrique Neder Programação Stata

Page 10: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Indexação

generate y = x[_n+1]Produz em y valores avançados de x sendo y[_N} missing.generate y = x[_N]Produz em cada observação de y o último valor de x.generate y = x[_N-_n+1]Produz em y os valores em ordem inversa de x.

Henrique Neder Programação Stata

Page 11: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Macros

Um exemplo de uso de macroslocal list = "age weight sex"regress outcome `list'é o mesmo que:regress outcome age weight sexComo macros podem ser usadas?local cntrl = long list of variablesregress ln_earn `cntrl'regress ln_earn `cntrl' if femaleregress ln_earn `cntrl' if !femaleregress ln_earn `cntrl' femaleIsto não apenas reduz a quantidade de caracteres a serem digitadosem meu do�le como o torna mais legível assim como reduz aprobabilidade de cometer erros.

Henrique Neder Programação Stata

Page 12: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Macros

O uso de macros não é limitado a de�nição de lista de variáveis. Elaspodem conter qualquer coisa. Por exemplo: em um do�le preciso executardiversos comandos em uma sub-amostra complicada dos meus dados.local if "if (hours>0 | hours>=.) & weeks>0 & earn>0 &earn/weeks>100"summarize ... `if'tabulate ... `if'regress ... `if'Macros também podem conter valores numéricos:. local a = -4.57213. local b = 2.12394. local c = .72195. di ( -`b' + sqrt((`b')^2 - 4*`a'*`c') ) / (2*`a')-.22800334

Henrique Neder Programação Stata

Page 13: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Macros

Note que acima usamos (`b')^2. Porque não usamos simplesmente`b'^2? Porque quando o Stata está executando linhas, faz oseguinte:

1 Substitui todas as macros por seus valores

2 Executa a linha

Se o valor contido na mabro `b' for negativo, a precedência deoperação teria aplicado o operador potência primeiro e depoiscolocado o sinal negativo.

Henrique Neder Programação Stata

Page 14: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Macros

As vezes necessito utilizar um resultado previo e introduzir este resultado emum comando posterior. Suponha que sejam obtidos os percentis 5 e 95 para avariável income. Utilizando a sub-amostra dentro do intervalo entre estes doispercentis aplicamos o comando summarize para outras variáveis e executamosuma regressão. Somos tentados a escrever no do�le:summarize income, detailsummarize varlist if r(p5)<income & income<r(p95), detailregress ... if r(p5)<income & income<r(p95)Mas isto não funciona porque executando o segundo comando summarize osvalores de r(p5) e r(p95) são resetados. Uma solução mais adequada, usandomacros, seria:summarize income, detaillocal lo = r(p5)local hi = r(p95)summarize varlist if `lo'<income & income<`hi', detailregress ... if `lo'<income & income<`hi'

Henrique Neder Programação Stata

Page 15: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Rami�cações e loopings

Um looping simples pode ser:program tenforvalues i = 1(1)10 {display "`i'"}endten

Outra forma de executar a mesma coisa é:program ten_wlocal i = 1 /* local i 1 would be okay, too */while `i' <= 10 {display `i'local i = `i' + 1}endten_w

Henrique Neder Programação Stata

Page 16: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Looping ao longo das observações

cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/CURSO PROGRAMACAO STATA/lecture2/"in�le using "patient.dct", clearprogram listerlocal N = _Nforvalues i = 1(1)`N' {display /* a blank line */display name[`i']display _column(10) "sex " sex[`i'] _skip(5) /**/ "age " age[`i'] _skip(5) /**/ "length of stay " los[`i'] }endlister

Henrique Neder Programação Stata

Page 17: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

Uma das formas muito úteis em programação no Stata é o usoda dupla de comandos post�le e post.

No exemplo a seguir abriremos uma arquivo de microdados daPNAD, iremos fazer uma sequência de cálculos de elasticidadesda pobreza-Gini e elasticidades da pobreza-crescimento paracada unidade da Federação e armazenaremos cada resultadoem uma linha do arquivo de�nido pelo comando post�le.

Henrique Neder Programação Stata

Page 18: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

Programa de cálculo da elasticidade-crescimento e elasticidade-Ginida pobreza. Método desenvolvido por Datt (1998). ComputationalTools for Poverty Measurement and Analysis. FCND DISCUSSIONPAPER NO. 50.

cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/PNAD1995/DADOS/"set more o�postutil clearpost�le saidaelast uf neta1 neta2 neta3 neta4 neta5 neta6 p0 p1 p2 gini usingsaidaelast, replace

O comando postutil clear limpa a memória de post. O comandopost�le de�ne um arquivo de post (um arquivo exerno) onde serãosalvos os resultados de um processamento de uma rotina.

Henrique Neder Programação Stata

Page 19: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

************************************************* rotina de calculo de elasticidades da pobreza************************************************capture program drop elastprogram de�ne elastsummarize rendapc [fw=v4729]scalar mu = r(mean)summarize lp

O comando capture program drop deleta qualquer programa comnome elast que estiver na memória do Stata. O comando program

de�ne inicia a rotina chamada elast que será �nalizada com o co-mando end mais adiante.

Henrique Neder Programação Stata

Page 20: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

Todos os procedimentos computacionais desta rotina são descritosem Datt(1998) e foram aqui aplicados na linguagem computacionaldo Stata

scalar z = r(mean)glcurve rendapc [fw=v4729], gl(L1) p(p) nographgenerate L = L1/mu* Especi�cação da Curva de Lorenz: Quadrática Geralgenerate y1 = L*(1-L)generate x1 = p^2 - Lgenerate x2 = L*(p-1)generate x3 = p - Lregress y x1 x2 x3

Henrique Neder Programação Stata

Page 21: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

* veri�car se o intercepto é não signi�cativoregress y x1 x2 x3, noconstantmatrix b1 = e(b)scalar a = b1[1,1]scalar b = b1[1,2]scalar c = b1[1,3]scalar e = -(a + b + c + 1)scalar m = b^2 - 4*ascalar n = 2*b*e - 4*c

Henrique Neder Programação Stata

Page 22: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

scalar r1 = (n^2 - 4*m*(e^2))^(1/2)scalar s1 = (r1 - n)/(2*m)scalar s2 = -(r1 + n)/(2*m)scalar H = -(1 / (2*m))*(n +r1*(b+2*z/mu)*((b+2*z/mu)^2-m)^(-1/2))scalar LH = -(1/2)*(b*H + e + (m*H^2 + n*H + e^2)^(1/2))scalar PG = H - (mu/z)*LHscalar P2 = 2*PG - H - ((mu/z)^2)*(a*H + b*LH -(r1/16)*ln((1-H/s1)/(1-H/s2)))

Henrique Neder Programação Stata

Page 23: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

* calculo da segunda derivada da curva de Lorenzscalar L2H = (r1^2*(m*H^2 + n*H + e^2)^(-3/2))/8* calculo do indice de Giniif m < 0 {scalar gini = e/2 - n*(b + 2)/(4*m) + r1^2 /(8*m*sqrt(-m))*(asin((2*m + n)/r1) - asin(n/r1))}else {scalar gini = e/2 - n*(b + 2)/(4*m) + r1^2 /(8*m*sqrt(m))*ln(abs((2*m + n + 2*sqrt(m)*(a + c - 1))/(n - 2*e * sqrt(m))))}

Henrique Neder Programação Stata

Page 24: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

* calculo das elasticidades da pobreza com relação à média µ

(designada pelo escalar mu)scalar neta1 = - z/(mu*H*L2H)scalar neta2 = 1 - H/PGscalar neta3 = 2*(1-PG / P2)scalar neta4 = (1 - z / mu) / (H*L2H)scalar neta5 = 1 + (mu/z - 1)*H/PGscalar neta6 = 2*(1 + (mu/z - 1)*PG /P2)post saidaelast (uf) (neta1) (neta2) (neta3) (neta4) (neta5)(neta6) (H) (PG) (P2) (gini)end

Henrique Neder Programação Stata

Page 25: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

O comando post grava um registro no arquivo de�nido pelo comandoposti�le de acordo com a mesma sequência de variáveis que foramde�nidas anteriormente.

cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/PNAD1995/DADOS/"foreach uf of numlist 17 21(1)29 31 32 33 35 41(1)43 50(1)53 {use pnad95.dta, clearkeep if uf == `uf'keep rendapc v4729lp scalar uf = `uf' elast}postclose saidaelastuse saidaelast, clearedit Henrique Neder Programação Stata

Page 26: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Como alimentar arquivos externos com resultados de

processamento

O comando foreach executa um looping apenas para os valores lis-tados da macro local `uf'

Henrique Neder Programação Stata

Page 27: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Exemplo de administração de dados

cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/CURSO PROGRAMACAO STATA/"mkdir lecture3cd lecture3run http://www.stata.com/courses/nc151-10/lec3.do

Henrique Neder Programação Stata

Page 28: Programação Stata - UFU€¦Veri cações em rquivos:a o comando assert Indexação Macros Rami cações e loopings Como fazer veri cações em arquivos - comando assert Construa

IntroduçãoVeri�cações em arquivos: o comando assert

IndexaçãoMacros

Rami�cações e loopings

Exemplo de administração de dados

cd "/home/hdneder/Dropbox/DISCIPLINA OPTATIVAPOSGRADUACAO/CURSO PROGRAMACAO STATA/lecture3"capture log closeset more o� log using crone, replaceclearin�le using pat save pat1, replaceclearin�le using hlogsave hlog1, replacelog closeexit

Henrique Neder Programação Stata