CONTENT

Learn how to create and debug your own commands that are indistinguishable from the commands in Stata. You will be able to parse both standard and nonstandard Stata syntax using the intuitive syntax command, to manage and process saved results, to post your own saved results, to process by-groups, to create data management commands, to program your own maximum-likelihood estimator, and more. In short, learn to create commands that act just like the commands that ship with Stata.

 

PREREQUISITES

Stata 16 installed and working

Course content of NETCourse 151  or equivalent knowledge

Internet web browser, installed and working (course is platform independent)

 

PROGRAM

 

LESSON I: PARSING STATA SYNTAX/STATA PROGRAMMING BASICS

Review of Stata’s programming features

Parsing

Parsing options

Parsing complicated syntax

Aside on subprograms

 

LESSON II: PARSING STATA SYNTAX, CONTINUED: QUOTES, RETURNED RESULTS, AND SUBSAMPLES

Quotes

Development continues

Temporary variables

Development continues

An aside concerning r()

Programming the formulas

Putting it together

 

LESSON III: USING SCALARS AND MACROS AND INTRODUCTION TO LOW-LEVEL PARSING

What you must learn

Scalars

Binary accuracy

Accuracy of macros versus scalars

Converting a program from macros to scalars

Handling by() options

Sorting

Low-level parsing

Programming immediate commands

Rewriting mytt in terms of mytti

Parsing new variables

LESSON IV: RETURNING RESULTS AND WRITING ESTIMATION COMMANDS

Where are we?

Stored results

What can be returned in r()?

Referring to returned results in other programs

Referring to returned results in the program that sets them

Other types of returned values: s() and e()

S-class returned values

E-class returned results

Writing postestimation commands

Writing an estimation (e-class) command

An alternative estimation command outline

Writing estimation commands from first principles

Writing estimation commands via maximum likelihood

 

LESSON V: LIST PROCESSING, CONTROLLING PROGRAM OUTPUT, AND NAMING CONVENTIONS

Restricting commands to the relevant subsample

Which is better: marksample or mark?

Programming by varlist:

Lists

Creating lists

Stepping through list elements one by one

Deleting elements from lists

Adding elements to lists

Macro vectors

Parsing revisited: gettoken

quietly blocks

The relation between capture and quietly

capture blocks

Naming conventions

Program-naming convention

Calling convention

Version control

 

Note: There is a one-week break between the posting of Lessons 3 and 4; however, course leaders are available for discussion.