Elisabeth Simantov, PhD
> Perhaps someone can help me with this. I am not a
> programmer, so please be explicit.
> New question.
> I have 19 variables that start with the prefix me_ and 19
> variables that
> start with the prefix ppg_ . They all have other letters after the
> underscore, actually the same for each group of 19.
>
> I have to create the following 19 new variables:
> newvars=(me_ * var1)+(ppg_ * var1) for each observation in the data
set (510)
> Is there a way for me to do this in one step. If not, can
> you please tell me how?
Tacit in this is that there is a pairing between
the -me_*- and the -ppg_*-
1. Use -for-
============
One way to do it is with -for-:
for var me_* \ var ppg_* : gen stub_X_Y = var1 * (X + Y)
Naturally you can devise your own naming convention.
This presupposes that the two sets of variables
are both in an appropriate order in memory.
order me_* ppg_*
would be a quick but brutal way to ensure that.
In fact, although -for- has many disadvantages,
it is hard to beat for conciseness here.
Also, it checks that the number of
variables is the same in both lists.
2. Use -forvalues-
==================
Another way to do it is with -forval-:
unab me : me_*
unab ppg : ppg_*
local nv : word count `me'
forval i = 1 / `nv' {
local m : word `i' of `me'
local p : word `i' of `ppg'
gen stub_`m'_`p' = var1 * (`m' + `p')
}
Same presupposition.
There isn't a check here that the number of
variables is the same in both lists.
In your case, you know that the number of
variables is 19, so you can abbreviate:
unab me : me_*
unab ppg : ppg_*
forval i = 1 / 19 {
local m : word `i' of `me'
local p : word `i' of `ppg'
gen stub_`m'_`p' = var1 * (`m' + `p')
}
3. Use -foreach-
================
There are solutions with -foreach-. Like
that with -forval-, they are typically
a few lines long. Anyone see a really
concise way to do it?
Nick
[email protected]
*
* 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/