Statalist The Stata Listserver

[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: on the care and feeding of scalars

From   Kit Baum <[email protected]>
To   [email protected]
Subject   st: on the care and feeding of scalars
Date   Wed, 21 Jun 2006 08:39:37 -0400

Nick alluded to my recent troubles with scalars. The issue is quite
nicely discussed in a Stata Tip in the very latest issue of the Stata
Journal (you do subscribe, don't you?) by Gueorgui I. Kolev in

The problem arose in the levinlin routine. A researcher was getting a
peculiar "no observations" error when calling the test in
circumstances that suggested she should have no problem with the
routine. It turned out that the researcher has a variable "casenum"
in her dataset. When Fabian Bornhorst and I wrote levinlin, we used
"scalar case" to distinguish between various cases determined by
options. Due to Stata's annoying habit of by default allowing
abbreviations of variables to be used, a statement such as

if case == 1 {

examined not the scalar case, but the FIRST OBSERVATION of the
variable casenum, which (fortunately!) did not happen to coincide
with any of the values we were expecting. Unfortunately, we did not
test for that circumstance in the code.

There are several ways of avoiding being bitten by this bug. The best
IMHO is to use a tempname for scalars that are local to a program.
(We also could have specified in the if statement that we were
referring to the scalar case, but that is rather clumsy). Even if the
abbreviation setting was disabled, a user variable named "case" would
have caused this problem.

This is a rather nasty bug to diagnose -- easy enough to fix, but
somewhat tricky to locate. The best way to avoid it is to use
temporary names (and temporary variables, for that matter) when the
object should have ephemeral existence.

Best wishes of the summer (or winter!) solstice to all--

Kit Baum, Boston College Economics

*   For searches and help try:

© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index