{ advanced stata programming andrew hicks ccpr statistics and methods core
TRANSCRIPT
![Page 1: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/1.jpg)
{
Advanced Stata Programming
Andrew HicksCCPR Statistics and Methods Core
![Page 2: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/2.jpg)
Automating your work
1.Macros2.Saved Results3.Loops4.Egen commands5.Writing programs6.Ado files
![Page 3: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/3.jpg)
MacrosAssigns a string of text or a number to an abbreviation.
( a box you put text in)
local name content
local x 1
(italics indication something you provide)
display `x’
![Page 4: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/4.jpg)
MacrosAssigns a string of text or a number to an abbreviation.
local nobs = 198
display “The number of observations equals: `nobs’”
display `nobs’ – 90
Local macros can be used only within the do-file in which the are defined. • When the program ends, the macro disappear.
Global macros persist until you delete it or exit Stata.
local x 1
global x 1
![Page 5: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/5.jpg)
MacrosAssigns a string of text or a number to an abbreviation.
regress price headroom trunk weight length
local size “headroom trunk weight length”
`size’
regress price `size’
regress mpg `size’
regress gear_ratio `size’ foreign turn
( a box you put text in)
![Page 6: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/6.jpg)
Results saved by StataStata provides the number so you don’t have to enterby hand.
summarize price
return list
generate price_centered2 = price – r(mean)
generate price_centered = price – 6165.257
![Page 7: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/7.jpg)
Loops
summarize pricegenerate price_centered = price – r(mean)summarize mpggenerate mpg_centered = mpg – r(mean)summarize weightgenerate weight_centered = weight – r(mean)summarize lengthgenerate length_centered = weight – r(mean)summarize turngenerate turn_centered = turn – r(mean)summarize displacementgenerate displacement = displacement – r(mean)
Center 5 variables from Auto dataset: price, mpg, weight, length, turn, displacement
Manually:
![Page 8: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/8.jpg)
Foreach Loops
foreach var in price mpg weight length turn displacement {summarize `var’generate `var’_centered2 = `var’ – r(mean)
}
Center 6 variables from Auto dataset: price, mpg, weight, length, turn, displacement
Loop (foreach):
1. summarize pricegenerate price_centered2 = price – r(mean)
2. summarize mpggenerate mpg_centered2 = mpg – r(mean)
.
.
6. summarize displacementgenerate displacement_centered2 = displacement – r(mean)
![Page 9: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/9.jpg)
Foreach Loops
foreach depvar in weight length turn displacement {regress `depvar’ price mpg headroom trunk
}
Loop (foreach):
foreach item in quest1 qeust2 qeust3 quest4 {replace `item’=. if `item’ == 99
}
foreach item of varlist quest* {replace `item’=. if `item’ == 99
}
foreach depvar of varlist weight-displacement {regress `depvar’ price mpg headroom trunk
}
![Page 10: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/10.jpg)
Foreach Loops
generate taxinc1 = inc1 * .10generate taxinc2 = inc2 * .10generate taxinc3 = inc3 * .10generate taxinc4 = inc4 * .10generate taxinc5 = inc5 * .10generate taxinc6 = inc6 * .10generate taxinc7 = inc7 * .10generate taxinc8 = inc8 * .10generate taxinc9 = inc9 * .10generate taxinc10 = inc10 * .10generate taxinc11 = inc11 * .10generate taxinc12 = inc12 * .10
Create your own foreach loop:
foreach lname in list { commands referring to lname}
![Page 11: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/11.jpg)
Forvalues Loops
gen hadInc1990 = (inc1990>0) if inc1990<.gen hadInc1991 = (inc1991>0) if inc1991<...gen hadInc2009 = (inc2009>0) if inc2009<.gen hadInc2010 = (inc2010>0) if inc2010<.
![Page 12: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/12.jpg)
Forvalues Loops
forvalues year=1990/2010 {gen hadInc`year’=(inc`year’>0) if inc`year’<.
}
Loop (forvalues):
![Page 13: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/13.jpg)
Forvalues LoopsLoop (forvalues):
forvalues year=1990/2010 {gen hadInc`year’=(inc`year’>0) if inc`year’<.
}
forvalues year=1990(2)2010 {gen hadInc`year’=(inc`year’>0) if inc`year’<.
}
foreach year of numlist 1980 1983 1990{gen hadInc`year’=(inc`year’>0) if inc`year’<.
}
forvalues race=1/3 { svy, subpop(if race==`race’): regress income age i.education}
levelsof race, local(races)foreach race in races { svy, subpop(if race==`race’): regress income age i.education}
![Page 14: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/14.jpg)
Forvalues Loops
generate taxinc1 = inc1 * .10generate taxinc2 = inc2 * .10generate taxinc3 = inc3 * .10generate taxinc4 = inc4 * .10generate taxinc5 = inc5 * .10generate taxinc6 = inc6 * .10generate taxinc7 = inc7 * .10generate taxinc8 = inc8 * .10generate taxinc9 = inc9 * .10generate taxinc10 = inc10 * .10generate taxinc11 = inc11 * .10generate taxinc12 = inc12 * .10
Create your own forval loop:
forvalues lname = range { commands referring to lname}
![Page 15: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/15.jpg)
Nested Loopsforval i=1/3 { forval j=1/3 {
display “`i’, `j’” }}
![Page 16: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/16.jpg)
Nested Loops
forval year = 1990/2010 { foreach month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec { gen hadInc`month’`year’ = (inc`month’`year’>0) if inc`month’`year’<. }}
![Page 17: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/17.jpg)
Loops with counterlocal counter = 0foreach var in price mpg weight length turn displacement {
local counter = `counter’ + 1display “`counter’ - `var’”
}
local counter = `counter’ + 1local ++counter
local ++counter
![Page 18: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/18.jpg)
While Loops
foreach and forvalues loops repeat a command a set number of times:
forval i=1/5 { display `i’}
while loops repeat until a condition is no longer true:
local i 1while `i’<=5 { display `i++’}
![Page 19: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/19.jpg)
Egen commands
Take the average:
generate mean_score = (read + write + math + science)/4
But if any single score is missing, the total score will be missingSolution:
egen mean_score = rowmean(read write math science)
egen mean_score = rowmean(score1 score2 score3 score4)
egen mean_score = rowmean(score*)
= rowtotal(score*)
= rowmax(score*)
= rowmin(score*)
![Page 20: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/20.jpg)
Egen commandsrowmean( ) averages across variables
mean( ) averages across observations
egen mean_read = mean(read)
egen schooltype_mean_read = mean(read), by(schtyp)
![Page 21: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/21.jpg)
Writing programsA simple program:
program define hellodi “Hello World”end
A more complicated program:
capture program drop helloprogram define hellodi “Hello `1’”end
An even more complicated program:
capture program drop helloprogram define hellodi “Hello `0’”end
![Page 22: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/22.jpg)
Writing programsA program to center variables:
program define demeanforeach var of local 0 {quietly: sum `var'replace `var'=`var'-r(mean)}end
![Page 23: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/23.jpg)
Writing programsA program to center variables:
program define demean foreach var of local 0 { capture confirm numeric variable `var' if _rc==0 { sum `var',meanonly replace `var'=`var'-r(mean) } else di "`var' is not a numeric variable and cannot be demeaned." } end
![Page 24: { Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core](https://reader030.vdocuments.us/reader030/viewer/2022020920/551c042e550346a34f8b4d8f/html5/thumbnails/24.jpg)
Ado filesHow to make an ado file:
1. Write a program in a do-file
2. Save the do-file with .ado extension demean.ado
3. Put the .ado file in your personal ado directorysysdir
PERSONAL: c:\ado\personal\
4. Use your ado program just like any other Stata command