1 / 24

Advanced Stata Programming

Advanced Stata Programming. Andrew Hicks CCPR Statistics and Methods Core. Macros Saved Results Loops Egen commands Writing programs Ado files. Automating your work. Assigns a string of text or a number to an abbreviation. . ( a box you put text in). local name content.

ramona
Download Presentation

Advanced Stata Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Advanced Stata Programming Andrew Hicks CCPR Statistics and Methods Core

  2. Macros Saved Results Loops Egen commands Writing programs Ado files Automating your work

  3. Assigns a string of text or a number to an abbreviation. ( a box you put text in) local name content (italics indication something you provide) local x 1 display `x’ Macros

  4. Assigns 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. local x 1 Macros Global macros persist until you delete it or exit Stata. global x 1

  5. Assigns a string of text or a number to an abbreviation. ( a box you put text in) regress price headroom trunk weight length `size’ local size “headroom trunk weight length” regress price `size’ Macros regress mpg `size’ regress gear_ratio `size’ foreign turn

  6. Stata provides the number so you don’t have to enter by hand. summarize price return list Results saved by Stata generate price_centered = price – 6165.257 generate price_centered2 = price – r(mean)

  7. Center 5 variables from Auto dataset: price, mpg, weight, length, turn, displacement Manually: summarize price generate price_centered = price – r(mean) summarize mpg generate mpg_centered = mpg – r(mean) summarize weight generate weight_centered = weight – r(mean) summarize length generate length_centered = weight – r(mean) summarize turn generate turn_centered = turn – r(mean) summarize displacement generate displacement = displacement – r(mean) Loops

  8. Center 6 variables from Auto dataset: price, mpg, weight, length, turn, displacement Loop (foreach): foreachvar in price mpg weight length turn displacement { summarize `var’ generate `var’_centered2 = `var’ – r(mean) } 1. summarize price generate price_centered2 = price – r(mean) 2. summarize mpg generate mpg_centered2 = mpg – r(mean) Foreach Loops . . 6. summarize displacement generate displacement_centered2 = displacement – r(mean)

  9. Loop (foreach): foreachdepvar in weight length turn displacement { regress `depvar’ price mpg headroom trunk } foreachdepvarof varlistweight-displacement { regress `depvar’ price mpg headroom trunk } foreachitem in quest1 qeust2 qeust3 quest4 { replace `item’=. if `item’ == 99 } Foreach Loops foreachitemof varlistquest* { replace `item’=. if `item’ == 99 }

  10. Create your own foreach loop: generate taxinc1 = inc1 * .10 generate taxinc2 = inc2 * .10 generate taxinc3 = inc3 * .10 generate taxinc4 = inc4 * .10 generate taxinc5 = inc5 * .10 generate taxinc6 = inc6 * .10 generate taxinc7 = inc7 * .10 generate taxinc8 = inc8 * .10 generate taxinc9 = inc9 * .10 generate taxinc10 = inc10 * .10 generate taxinc11 = inc11 * .10 generate taxinc12 = inc12 * .10 foreachlname in list { commands referring to lname } Foreach Loops

  11. 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<.

  12. Forvalues Loops Loop (forvalues): forvaluesyear=1990/2010 { gen hadInc`year’=(inc`year’>0) if inc`year’<. }

  13. Loop (forvalues): forvaluesyear=1990/2010 { gen hadInc`year’=(inc`year’>0) if inc`year’<. } forvaluesyear=1990(2)2010 { gen hadInc`year’=(inc`year’>0) if inc`year’<. } foreachyear of numlist1980 1983 1990{ gen hadInc`year’=(inc`year’>0) if inc`year’<. } forvaluesrace=1/3 { svy, subpop(if race==`race’): regress income age i.education } Forvalues Loops levelsofrace, local(races) foreachrace in races { svy, subpop(if race==`race’): regress income age i.education }

  14. Create your own forval loop: generate taxinc1 = inc1 * .10 generate taxinc2 = inc2 * .10 generate taxinc3 = inc3 * .10 generate taxinc4 = inc4 * .10 generate taxinc5 = inc5 * .10 generate taxinc6 = inc6 * .10 generate taxinc7 = inc7 * .10 generate taxinc8 = inc8 * .10 generate taxinc9 = inc9 * .10 generate taxinc10 = inc10 * .10 generate taxinc11 = inc11 * .10 generate taxinc12 = inc12 * .10 forvalueslname=range { commands referring to lname } Forvalues Loops

  15. forvali=1/3 { forval j=1/3 { display “`i’, `j’” } } Nested Loops

  16. forvalyear = 1990/2010 { foreachmonth 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’<. } } Nested Loops

  17. local counter = 0 foreachvar in price mpg weight length turn displacement { local counter = `counter’ + 1 display “`counter’ - `var’” } local ++counter Loops with counter local counter = `counter’ + 1 local ++counter

  18. foreach and forvalues loops repeat a command a set number of times: forvali=1/5 { display `i’ } while loops repeat until a condition is no longer true: local i 1 while `i’<=5 { display `i++’ } While Loops

  19. Take the average: generate mean_score = (read + write + math + science)/4 But if any single score is missing, the total score will be missing Solution: egenmean_score = rowmean(read write math science) egenmean_score = rowmean(score1 score2 score3 score4) Egen commands egenmean_score = rowmean(score*) = rowtotal(score*) = rowmax(score*) = rowmin(score*)

  20. rowmean( ) averages across variables mean( ) averages across observations Egen commands egenmean_read = mean(read) egenschooltype_mean_read = mean(read), by(schtyp)

  21. A simple program: program define hello di “Hello World” end A more complicated program: capture program drop hello program define hello di “Hello `1’” end An even more complicated program: Writing programs capture program drop hello program define hello di “Hello `0’” end

  22. A program to center variables: program define demean foreachvar of local 0 { quietly: sum `var' replace `var'=`var'-r(mean) } end Writing programs

  23. A program to center variables: program define demean foreachvar 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 Writing programs

  24. How to make an ado file: • Write a program in a do-file • Save the do-file with .ado extension • demean.ado • Put the .ado file in your personal ado directory • sysdir • PERSONAL: c:\ado\personal\ • Use your ado program just like any other Stata command Ado files

More Related