You shouldn't put quotes around the macro in the extended function
-word of-. e.g.,
. local varlist "var1 var2 var3 var4"
. local depvar : word 1 of "`varlist'"
. di "`depvar'"
var1 var2 var3 var4
. local depvar : word 1 of `varlist'
. di "`depvar'"
var1
--- In [email protected], David Kantor <dkantor@j...> wrote:
> At 05:43 PM 7/25/2005 +0200, Thomas Cornelissen wrote:
>>Dear Stata Users,
>>I want to write an ado file using the -syntax- command as follows:
>>
>>syntax varlist(min=2) [if] [in]
>>
>>The first variable in varlist is the dependent variable, the others
are
>>the independent variables. I need to access them seperately in my
ado-file.
>>Therefore I create a local that contains the name of the dependent
>>variable, i.e. the first word of the varlist-string, and a local that
>>contains all the rest and can be used as a varlist of only the
independent
>>variables.
>>
>>local depvar=word("`varlist'",1)
>>
>>local
indepvar=substr("`varlist'",length("`depvar'")+1,length("`varlist'"));
>>
>>My problem is that if the varlist is very long, it gets cut off at the
>>81st character. It seems that both the -length- and the -substr-
function
>>can only be applied to strings up to 81 characters.
>>
>>I tried also to precede 'varlist' in the -syntax- command by
'varname',
>>'name' or 'anything' to capture the independent variable, but that
returns
>>error messages.
>>
>>Can anybody suggest a better way to do what I want to do? Is there
a good
>>way of splitting one varlist into two varlists?
>>Thanks a lot for any suggestions!
>>Thomas
>>
>>------------------------------------------------------------------
>>Thomas Cornelissen
>>Empirical Economic Research
>>University of Hannover, Germany
>
> The problem is that you are setting the macros to expressions --
using an
> equal sign. String expressions are limited to 80 characters (or
something
> longer in Stata SE).
>
> If instead, you use extended functions, this truncation will not
occur (at
> least, not for a few thousand characters). You should look into the
macro
> extended functions. See -help local-, and loot at the "extended_fcn"
> section. Often, a function also exists as an extended function for
macros,
> and you can just switch the = to a : (colon) -- though sometimes the
syntax
> is a bit different (as shown below).
>
> But in your case, there are possibly better options.
>
> local depvar : word 1 of "`varlist'"
> /* Note the colon and the somewhat different syntax. You had local
> depvar=word("`varlist'",1), which is probably okay, because of the
length
> of a variable name, but this is, generally, more secure.
> */
>
> local indepvar : list varlist - depvar
>
> /* -- gets you what you want directly. See -help macrolists-.
> There are other solutions, but this is probably the simplest in
terms of
> programming, and it is very comprehensible.
> */
>
> HTH,
> -- David
>
> David Kantor
> Institute for Policy Studies
> Johns Hopkins University
> dkantor@j...
> 410-516-5404
>
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/