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

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

From |
David de Jong <[email protected]> |

To |
[email protected] |

Subject |
Re: st: Duplicate variable only if a previous variable has a certain value |

Date |
Fri, 29 Nov 2013 18:57:04 -0500 |

Nick, Your solution much more sensible and worked like a charm. The general approach will be also be helpful to me in the future. Thanks so much! David ~ David C. de Jong, MA Department of Clinical and Social Sciences in Psychology University of Rochester 214 Meliora Hall Rochester, NY 14627 On Fri, Nov 29, 2013 at 6:40 PM, Nick Cox <[email protected]> wrote: > The syntax for -generate- always starts > > generate newvar = ... > > where newvar is a new variable name. > > You are expecting Stata to evaluate the expression you give and use it > as the new variable name. For that you need the extra scaffolding of > `= ' > > generate `=subinstr(`v',"_w_sub400","corr",1)' = ... > > But this would be more Stataish and easier to read: > > qui forval j = 21/164 { > > gen rt`j'corr = rt`j'_w_sub400 if correct`j'int == 0 > > } > > Think: what are the variable elements, what are the constant elements? > And cycle over the variable elements along. > > Nick > [email protected] > > > On 29 November 2013 23:27, David de Jong <[email protected]> wrote: > >> I'm trying to duplicate a set of variables (response times for a set >> of trials) so that the original value is reproduced only if the trial >> response was correct (which is indicated by an earlier set of >> variables). If the trial response was incorrect the duplicated >> variable should be missing. >> >> Trials are numbered 21-164. Whether the trial was correct is stored in >> variables correct21int-correct164int (0=correct, 1=incorrect, byte). >> Response times are stored in variables rt21_w_sub400-rt164_w_sub400 >> (float). >> >> So, for trial 21, I want to create a new variable called rt21corr that >> is equal to rt21_w_sub400 if correct21int equals 0. >> >> I've tried to do this with the following loop: >> >> qui foreach v of var rt21_w_sub400-rt164_w_sub400 { >> generate subinstr(`v',"_w_sub400","corr",1) = `v' if >> subinstr(subinstr(`v',"_w_sub400","int",1),"rt","correct","1") == 0 >> } >> >> In case -substr- wanted all of its constituent parts in quotes I tried this: >> >> qui foreach v of var rt21_w_sub400-rt164_w_sub400 { >> generate subinstr("`v'","_w_sub400","corr",1) = `v' if >> subinstr("subinstr("`v'","_w_sub400","int",1)","rt","correct","1") == >> 0 >> } >> >> Both of these return the error message: >> ( invalid name >> >> Can anyone help me figure out how to make this syntax work, or, if >> there is a more elegant way to do what I hope to do. > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/statalist-faq/ > * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/

**References**:

- Prev by Date:
**Re: st: Duplicate variable only if a previous variable has a certain value** - Next by Date:
**st: rasch models** - Previous by thread:
**Re: st: Duplicate variable only if a previous variable has a certain value** - Next by thread:
**st: rasch models** - Index(es):