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

# Re: st: RE: using loop to generate distributions with different means and standard deviations

 From Lance Wiggains To statalist@hsphsun2.harvard.edu Subject Re: st: RE: using loop to generate distributions with different means and standard deviations Date Sat, 21 May 2011 17:38:56 -0400

```I was able to piece the code together. It is true that when generating
multiple drawnorms in a loop the means and standard deviations have to
be specified in matrix form. This is the code that I found to work.

forvalues i=1/3 {
mkmat mean_item_`i' if `i'==_n, matrix(m)
mkmat sd_item_`i' if `i'==_n, matrix(sd)
drawnorm product`i'_dist, m(m) sd(sd)
}

Thanks for all of your help.

Lance

On Fri, May 20, 2011 at 11:47 PM, Lance Wiggains
<lance.wiggains@gmail.com> wrote:
> I tried the command you suggested
>
> ds mean* sd*
> forvalues i=1/3 {
>       drawnorm product`i'_dist, m(mean_item_`i') sd(sd_item_`i')
> }
>
> but it failed, I got this error
>
> means(mean_item_1) invalid
> r(198);
>
> end of do-file
>
> r(198);
>
> I think the variable might need to be in matrix form. Does that sound
> right? If so, do you know how would I create the vector with the
> relevant information.
>
> Thanks for all of your help,
>
> Lance
>
> On Fri, May 20, 2011 at 2:44 PM, Sarah Edgington <sedging@ucla.edu> wrote:
>> Lance,
>> Is your actual data really different from the simulated data you've shown?
>> If not I don't understand why the solution I suggested before doesn't solve
>> your problem. If your variables are actually numbered like you've shown,
>> it's still just a -forvalues- loop to get the drawnorm part working.
>>
>> forv i=1/3 {
>>        drawnorm product`i', m(max_product`i') sd(sd_product`i')
>> }
>>
>> Unless you give more specific information about the actual problem you're
>> trying to solve and why the suggested solution doesn't work, I don't think
>> you're going to get much help.
>>
>> -Sarah
>>
>>
>>
>> -----Original Message-----
>> From: owner-statalist@hsphsun2.harvard.edu
>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Lance Wiggains
>> Sent: Friday, May 20, 2011 11:29 AM
>> To: statalist@hsphsun2.harvard.edu
>> Subject: st: using loop to generate distributions with different means and
>> standard deviations
>>
>> Sorry for the vagueness. Right now I'm just using simulated data for 3
>> different products. Here is my code:
>> My data looks like this
>> Week      Product 1        Product 2      Product 3
>> 1                  50                 45                 50
>> 2                  60                 50                 40
>> 3                  70                 55                 30
>> 4                  80                 50                 20
>> 5                  90                 45                 10
>> 6                  100               50                  0
>>
>> tsset week
>> gen n=_n
>> egen max_n=max(n)
>>
>> ds week n max_n, not
>> foreach var in `r(varlist)'{
>>       tssmooth ma ms_`var'= `var', weights(1 1<2>1)
>>       }
>>
>> ds ms*
>> foreach var in `r(varlist)' {
>>       gen week3_`var'=`var' if n==max_n
>>       egen max_week3_`var'=max(week3_`var')
>>       drop week3*
>>
>> }
>> drop ms*
>>
>> ds week n max_*, not
>> foreach var in `r(varlist)' {
>>       gen max_`var'=max_week3_ms_`var'
>> }
>> drop max_week*
>>
>> keep if n+3>=max_n
>> ds week n max*, not
>> foreach var in `r(varlist)'{
>>       egen sd_`var'=sd(`var')
>> }
>>
>> rename max_n maximum_n
>>
>> ds max_* sd* week, not
>> foreach var in `r(varlist)'{
>>       drop `var'
>> }
>>
>> drawnorm product1, m(max_product1) sd(sd_product1)
>>
>> Thanks,
>>
>> Lance
>> - Hide quoted text -
>>
>> On Wed, May 18, 2011 at 1:51 PM, Sarah Edgington <sedging@ucla.edu> wrote:
>>> Lance,
>>> That's a different problem.  From your original post I assumed you had
>>> all the variables already created.
>>> One strategy for writing loops is to write out the code for the first
>>> two examples of something repetitive you want to do.  Then identify
>>> the parts of the example that remain the same across the examples.
>>> If you post the code your trying to repeat we may be able to help you
>>> but your current description is too vague for me to do much more than
>>> offer vague suggestions of how to think about loops.
>>> -Sarah
>>>
>>> -----Original Message-----
>>> From: owner-statalist@hsphsun2.harvard.edu
>>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Lance
>>> Wiggains
>>> Sent: Wednesday, May 18, 2011 10:36 AM
>>> To: statalist@hsphsun2.harvard.edu
>>> Subject: Re: st: RE: using loop to generate distributions with
>>> different means and standard deviations
>>>
>>> I've tried that but the problem is that I'm pre-calculating the means
>>> and sd's for the variable because I'm only using the last 3-4
>>> observations for each variable to calculate those values. I'm doing
>>> this because I want it to reflect the changes that happen recently. My
>>> mean function uses tssmooth, with weights (1 1<2>), to average the
>>> last 3 weeks of sales. So if sales were 70,80,90, and 100 I get a
>>> value of 92.5 for my mean. It also calculates a SD for the last 3-4
>>> observations. Then I want to plug those numbers into the drawnorm function
>> using a loop. Any idea about how that would work?
>>>
>>> Lance
>>>
>>> On Wed, May 18, 2011 at 1:16 PM, Sarah Edgington <sedging@ucla.edu> wrote:
>>>> Lance,
>>>> Try something like this:
>>>>
>>>>        forv i=1/3 {
>>>>                 drawnorm name`i', m(mean_var`i') sd(sd_var`i')
>>>>        }
>>>>
>>>> You'll run into problems, though, if your data actually includes the
>>>> variable names you list since there isn't a sd_var1.
>>>>
>>>> -Sarah
>>>>
>>>> -----Original Message-----
>>>> From: owner-statalist@hsphsun2.harvard.edu
>>>> [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Lance
>>>> Wiggains
>>>> Sent: Wednesday, May 18, 2011 10:09 AM
>>>> To: statalist@hsphsun2.harvard.edu
>>>> Subject: st: using loop to generate distributions with different
>>>> means and standard deviations
>>>>
>>>> Statalist members,
>>>>
>>>> I'm trying to get Stata to generate a distribution of data from
>>>> variables in my data set.
>>>>
>>>> My appended data looks like this
>>>> mean_var1=90
>>>> standard_deviation_var1=5
>>>> mean_var2=100
>>>> sd_var2=10
>>>> mean var3=110
>>>> sd_var3=15
>>>> and so on
>>>>
>>>> I'm need a loop that will take my variables and create the
>>>> distributions for me.
>>>> I've been using the drawnorm command
>>>>     drawnorm name1, m(mean_var1) sd(sd_var1) but I can't get it to
>>>> recognize more than 1 variable at a time
>>>>
>>>> I want it to perform the distribution command for each pair of my
>>> variables.
>>>> I.e. (m_var1, sd_var1), (m_var2, sd_var2) , (m_var3, sd_var3)
>>>>
>>>> Thanks for your consideration,
>>>>
>>>> Lance
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/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/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/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```