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

st: RE: store variable names in local macro

From   "Nick Cox" <[email protected]>
To   <[email protected]>
Subject   st: RE: store variable names in local macro
Date   Tue, 29 Jan 2008 20:29:00 -0000

Please ignore my previous. Premature posting. 

I guess you are not telling us everything you're doing. 
I did this, and the answer is 6 in both cases:  

sysuse auto.dta, clear 
local x 
foreach var of varlist _all {
	local x `x' `var'
di "`x'"
di strpos("`x'", "price")
local y make price
di strpos("`y'", "price")

It may be that you are doing some things via the do-file editor
and some things from your command window. Either way, remember 
that locals are precisely that: local macros (which in Stata terminology
are _not_ variables at all) are local to their context, so you can't see
a local from outside. "Context" here is a nonce expression for Stata
program OR main session OR do-file (including do-file editor). 

Going beyond the example, using -strpos()- is not a good approach here.
At some point pretty soon you will be bitten by limits on the length of
a string in a string expression. See -help limits-. 

Using extended list functions is a better way to go on what you started.

But even better may be to consider using -confirm-. 

[email protected] 

-----Original Message-----
From: Nick Cox 
Sent: 29 January 2008 20:20
To: '[email protected]'
Subject: RE: store variable names in local macro

The name of the problem is limits. You want to feed a -strpos()- 

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Tim Wade
Sent: 29 January 2008 20:03
To: [email protected]
Subject: st: store variable names in local macro

Hi Statalisters:

I have a series of datasets with many variables but some variables are
missing from some data sets. I would like to evaluate the data sets to
see if certain variables are present before executing some code. My
idea was to store all the names of the variables in a dataset in a
macro variable, then evaluate that macro variable using "strpos" to
see if the variable is present in the list, ending the code if strpos
returns 0.  However, "strpos" does not seem to be able to evaluate my
macro variable. I have a feeling my problem may be the brute force way
I am creating the macro  (see below). When I manually create a local
variable, it works fine.  Can anyone suggest a better approach? Thanks
much in advance for any suggestions!

For example:

. sysuse auto.dta
(1978 Automobile Data)

/*create local macro with list of variable names*/
. local x ""

. foreach var of varlist _all {
  2. local x "`x'" " " "`var'"
  3. }

. di "`x'"
 make price mpg rep78 headroom trunk weight length turn displacement
gear_ratio foreign

. di strpos("`x'", "price")

*"price" is not found by the "strpos" function

/*create local variable manually*/

. local y make price

. di strpos("`y'", "price")

*   For searches and help try:

*   For searches and help try:

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