Thanks to Kit Baum, a new command, markobs, is now available from the SSC.
markobs is intended as a safe wrapper for mark and markout, helping to avoid accidential overwriting of variables. markobs originated from a discussion with Dirk Enzmann, who also reviewed the code and help file.
Here's a toy example to demonstrate the problem
Above, we load auto.dta and look at the distribution of foreign and rep78. We then create a temporary variable, touse (read: to-use), to indicate the sample we wish to use in subsequent code. We intend to set the marker variable to 0 for observations with missing values in foreign or rep78. Unfortunately, we misspell touse (omitting the u in tose). Even worse, markout doesn't complain. We're left with a sample of all 74 observations, whereas we wanted 69 observations because rep78 has 5 missing values, and -- much worse -- markout has changed the (byte) variable foreign!
Here's how markobs solves this problem:
Naturally, the 0/1 to-use variable created by markobs can be used with markin and svymarkout.
markobs is intended as a safe wrapper for mark and markout, helping to avoid accidential overwriting of variables. markobs originated from a discussion with Dirk Enzmann, who also reviewed the code and help file.
Here's a toy example to demonstrate the problem
Code:
. sysuse auto (1978 automobile data) . tabulate foreign Car origin | Freq. Percent Cum. ------------+----------------------------------- Domestic | 52 70.27 70.27 Foreign | 22 29.73 100.00 ------------+----------------------------------- Total | 74 100.00 . tabulate rep78 Repair | record 1978 | Freq. Percent Cum. ------------+----------------------------------- 1 | 2 2.90 2.90 2 | 8 11.59 14.49 3 | 30 43.48 57.97 4 | 18 26.09 84.06 5 | 11 15.94 100.00 ------------+----------------------------------- Total | 69 100.00 . tempvar touse . mark `touse' . markout `tose' foreign rep78 // <- misspelled `touse' . count if `touse' // <- want 69 74 . tabulate foreign Car origin | Freq. Percent Cum. ------------+----------------------------------- Domestic | 53 71.62 71.62 Foreign | 21 28.38 100.00 ------------+----------------------------------- Total | 74 100.00
Here's how markobs solves this problem:
Code:
. sysuse auto (1978 automobile data) . tempvar touse . markobs `touse' . markobs `tose' foreign rep78 // <- misspelled `touse' foreign not created by markobs r(498);