Statalist


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

st: RE: RE: Condition in a nested loop


From   Michael Stuetzer <[email protected]>
To   "[email protected]" <[email protected]>
Subject   st: RE: RE: Condition in a nested loop
Date   Mon, 24 Aug 2009 17:56:08 +1000

Dear Nick,

Thanks again for your help. Especially the difference between if qualifier and the if command was new for me, but now it makes of course sense.

Best regards
Michael

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Nick Cox
Sent: Friday, 21 August 2009 9:29 PM
To: [email protected]
Subject: st: RE: Condition in a nested loop

Note that, as in another problem you recently posted, the inner -while-
can be simplified to another -forval- loop. 

More importantly, see the FAQ on -if- to see that you are not
understanding the way that the -if- command differs from the -if-
qualifier: 

http://www.stata.com/support/faqs/lang/ifqualifier.html

Many Stata users have travelled down that tricky path before you. 

The code you need sounds like 

forvalues j=1/32 {
	forval i=1/146 { 
		replace timing_activities=`i' if activity==`j' & t`i' ==
1 
	}
}

However, do you really need the loop over -activity-? Would this be
enough? 

forval i=1/146 { 
	replace timing_activities=`i' if t`i' == 1 
}

It also sounds as if you could do with a -reshape long- of your data.

Nick 
[email protected] 

Michael Stuetzer

I have again a looping problem, and would be very thankful for a hint. I
have a time grid t1, t2 ... till t146, representing the number of months
since the start of the venture creation process of a company. In this
time grid t has the value of 1 if the company worked on a specific
activity in the venture creation process. If the company did not work on
this activity t equals zero. There are 32 (j) such activities, and
therefore for each company there are 32 rows in the dataset.

What I intend to do is to create a variable (timing_activities) which
takes the value of the month in which for the first time the company has
worked on this activity (e.g. 5 if the company worked in the 5th month
for the first time on that activity). Obviously I need a more advanced
loop for that job. It must loop over all 32 activities and over all
months, while evaluating if the company for the first time worked on
that activity j. Below is a first draft of such a loop, but
unfortunately it produces only missings in the variable
timing_activities.

forvalues j=1/32 {
	local i=1
	while `i'<=146 {
		if t`i'==1 {
			replace timing_activities=`i' if activity==`j'
			local i=`i'+1
		}
		else {
			local i=`i'+1
		}
	}
}


*
*   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index