Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: generate variable versus define scalar, with conditional statement

From   annoporci <>
Subject   Re: st: generate variable versus define scalar, with conditional statement
Date   Tue, 15 Jan 2013 21:42:13 +0800

I read the J.Wernow faq, but couldn't quite see how to rewrite the code.

Do I need to loop over every single date in the dataset?

Until my brain clicks, I'm just going to generate variables instead of scalars.

gen newvariable = open if date == mdy(1,3,2001)

With tens of thousands of observations, it seemed like a serious waste of resources to generate a variable to store the one useful scalar, but after 3 hours on this I'm in damage-limitation mode.

thanks Nick,



Patrick Toche.

On Tue, 15 Jan 2013 21:06:12 +0800, Nick Cox <> wrote:

In addition

. help scalar

gives the syntax you can use, and it's a fair principle to assume that
what is not permitted is forbidden. That is, -scalar- definitions
don't explicitly allow -if- or for that matter -in-.


On Tue, Jan 15, 2013 at 1:02 PM, Nick Cox <> wrote:
What's intuitive is usually just what is familiar through experience
(although that is contentious within (?) 20% of the history of
psychology and 80% of the history of epistemology).

Stata has an -if- command and an -if- qualifier and one distinction
between them is in where they are used, not in what they look like at
first glance.

What comes first logically in either case?

If something is true, you want a scalar calculated.

You want a variable -generate-d using a specified rule but only -if-
something is true in each observation.

The trouble is that I think that way and explain it that way because I
have internalised Stata's syntax.

All that said,

1. I'd assert that the form you found puzzling is a common form in
many programming languages. It is the -if- qualifier that is
idiosyncratic. However, Stata learners are most likely to meet the
-if- qualifier first.


if date == mdy(1,2,2001) scalar newscalar = open

still looks most unlikely to be what you really want _unless_ -date-
is also a scalar.

To see why, see

FAQ . . . . . . . . . . . . . . . . . . . . . if command vs. if qualifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J. Wernow
        6/00    I have an if command in my program that only seems
                to evaluate the first observation, what's going on?


On Tue, Jan 15, 2013 at 12:38 PM, annoporci <> wrote:

I learned something today I'd like to share with Statalist.

The way to conditionally define a variable and a scalar are different. An
example is given below.

clear all
sysuse sp500

/// generate a new variable with missing entries except at the given date
gen newvariable = open if date == mdy(1,2,2001)

/// define a new scalar by the value of variable open at the given date
if date == mdy(1,2,2001) scalar newscalar = open
scalar list

scalar newscalar = open if date == mdy(1,2,2001)

The above, incorrect way, is intuitive for a beginner (like myself), it is
similar to the syntax to generate new variables, but it won't work.

This is trivial for 99% of Statalist users, but may be a useful tip for
the remaining 1%. And if not, almost surely for a future incarnation of
myself scanning through Statalist for hints when the following error
message displays:

      if not allowed

When I submitted *stata scalar "if not allowed"* Google returned a solution,
in a more complicated setting:

Patrick Toche.
*   For searches and help try:

Patrick Toche.
*   For searches and help try:

© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index