Well, just found a workaround: just rename v1 and v2 to y1 and y2 and then
use: foreach i of varlist v*
Sorry to bother you all!
Best,
Nuno
-----Original Message-----
From: Nuno [mailto:[email protected]]
Sent: 17 July 2007 06:56
To: '[email protected]'
Subject: Running a program in a variable number of variables
Hello everyone,
I was wondering if someone could help me with a programming issue. I need to
import several csv files that might have a variable number of variables.
Given the structure of the files to be imported, the variables will be
labels v1, v2,..., vn and string. The code I'm using will then keep
variables v1, v2 and vi at each cycle. I've written the following program
(for simplicity, the code I'm sending is just for a file to be imported, not
for the complete set of files):
insheet using "C:\Documents and Settings\Nuno\Desktop\test.csv", clear cd
c:\ foreach i of numlist 3/4 { preserve keep v1 v2 v`i'
drop if v1==""
drop if length(v1)>7
gen year=v`i' if v1=="TYPE"
destring year, replace force
gen name=v2[_n-1] if year~=.
gen dscd=v1[_ n-1] if v1=="TYPE"
replace name=name[_ n-1] if name==""
replace dscd=dscd[_ n-1] if dscd==""
replace year=year[_ n-1] if year==.
drop if length(v1)<=6
rename v1 vars
rename v`i' data
drop v2
save file`i'.dta
restore
}
As you can see, in the foreach cycle I had to introduce the number start/end
of cycles manually. Is there a way to get this information directly for the
number of variables that are first imported? I would then do the cycle
"foreach i of numlist 3/(total_number_of_variables-2). I could use -varlist-
instead of -numlist- but I'm not sure how to define that starts in v3 and
ends at vn.
Best,
Nuno
*
* 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/