Bookmark and Share

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

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

Re: st: use random values in a calculation

From   Eric Booth <>
To   "<>" <>
Subject   Re: st: use random values in a calculation
Date   Mon, 4 Jul 2011 17:06:07 +0000

On Jul 4, 2011, at 9:52 AM, Zhi Su wrote:
> The ratio to multiply one of the variables could be 0 too.

The opt* variables created in my example already contained zero.  Type -tab opt1- after it is created in my example to see this.  
(The -replace- commands in the opt* loop start with .05 because zero was already created as part of the -generate- command in that loop)  

> Probably
> I do not ask the question right. The variables v1, v2, v3, v4 are
> known.

Yes, but not to me.  So that why I included this part of my solution:
>> **create fake v1-v4 variables for example:
>> forv nn = 1/4 {
>>   g v`nn' = runiform()*10
>>   }
to create v1-v4.  You can obviously omit this part if you've already got your data loaded into memory.

> The ratios multiply them are chosen from (0,0.05,0.1,0.15,0.2).
> Then each variable multiplied by a ratio are sum up. Totally, there
> are 5*5*5*5=625 combination for these four variables multipled by a
> ratio. Then I generate 625 variables for 625 types of sum.

In your original post you said that the ratios (opt*) are _randomly_ chosen to create sum 625 variables, which is what my example gave it sounds more like you want every possible combination of the opt* and v1-v4 variables (?)  [Though that's going to provide a lot more than 625 combinations]  Here's an example for every v* x opt* combination:

set obs 1000 // //changed from 625 obs
g var = "s" + string(_n)  //thanks to Nick Cox for pointing out this change

**create fake v1-v4 variables for example:
	//skip this if you are using your real v1-v4
forv nn = 1/4 {
	g v`nn' = runiform()*10
l in 1/9  //view fake v1 - v4 vars

**multiply each v1 by each ratio:
foreach var of varlist v1-v4 {
	foreach n1 in 0  05 1  15  2  {
	foreach n2 in 0  05 1  15  2  {
	foreach n3 in 0  05 1  15  2  {
	foreach n4 in 0  05 1  15  2  {

g s`var'_`n1'_`n2'_`n3'_`n4' = (v1*`n1')+(v2*`n2')+(v3*`n3')+(v4*`n4')

	} //end n1 loop
	} //end n2 loop
	} //end n3 loop
	} //end n4 loop
} //end var loop
	**also, you may want to check out -tuples- from SSC


If this still doesnt answer your question, we need more information.  
You should (1) provide an example of what you want -- give us some example and/or hypothetical lines of data & variables that you have as well as some lines/variables that you want to see and (2) explain how/why either of the 2 examples do not solve your issue -- we can't guess what's not doing what you expect here (for instance, the first solution I gave provided 625 'sum' variables -- did you mean observations?  did you expect to see the v1-v4 variables retained in the dataset? etc...)

- Eric
Eric A. Booth
Public Policy Research Institute
Texas A&M University

*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index