Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |
Subject | Re: st: Need help with working with multiple files |
Date | Tue, 28 May 2013 14:56:15 +0100 |
Connoisseurs of gaffes will have noticed one of my own yesterday in which I missed something immensely more obvious in Alberto Osella's post. Nick njcoxstata@gmail.com On 28 May 2013 14:50, Steve Samuels <sjsamuels@gmail.com> wrote: > > > Nick is right. The macro reference in the loop should be ``x''. As Nick suspected, I did have the files of the same name present in the do file directory, I was in error when I stated that my previous code "worded". > > Steve > > > On May 28, 2013, at 3:51 AM, Nick Cox wrote: > > My point is a general one about macro manipulation. Consider the > following code, which you can run as a block > > local ds1 "foo" > local ds2 "bar" > local all ds1 ds2 > > foreach x in `all' { > di "Show name: " _c > di "`x'" > di "Show contents: " _c > di "``x''" > } > > Here are the results. > > Show name: ds1 > Show contents: foo > Show name: ds2 > Show contents: bar > > Nothing about macro manipulation is affected by filenames being the > subject of manipulation, or on which operating system you use. > > I suspect Steve has the same files existing under other names. > Otherwise put, what is the explanation for this working for Steve that > is consistent with the logic of local macros? > > Nick > njcoxstata@gmail.com > > On 28 May 2013 02:46, Steve Samuels <sjsamuels@gmail.com> wrote: >> >> Well, I was concerned about that, but the code worked for me in >> Mac OS X, Here was my test do file: >> >> >> ********************************** >> local ds1 "~Downloads/testsim01" >> local ds2 "~Downloads/dtest01" >> >> local all ds1 ds2 >> di `"`all'"' >> foreach x in `all' { >> use `x', clear >> gen nv =1 >> save `x'_new, replace >> } >> ******************************** >> >> Steve >> >> On May 27, 2013, at 8:50 PM, Nick Cox wrote: >> >> This won't work, as when Stata hits the loop >> >> foreach x in `all' >> >> it will then see >> >> foreach x in ds1 ds2 >> >> and will fail at >> >> use ds1, clear >> >> There are two levels of macro referencing in Steve's code, but only >> one level going backwards. >> >> use ``x'', clear >> >> is one way to fix it. >> >> Nick >> njcoxstata@gmail.com >> >> >> On 28 May 2013 01:23, Steve Samuels <sjsamuels@gmail.com> wrote: >>> >>> Michael Steward (michaelstewartresearch@gmail.com): >>> >>> You can loop, as Nick suggests. Put the data management tasks in >>> external do files, e.g. tasks1.do, tasks2.do, tasks3.do. Then something >>> like the following should work (not tested in Windows). See the help for >>> -include-. The big problem I anticipate is the mounds of output that >>> this could generate. >>> >>> >>> ********************************* >>> local ds1 "c/data/dataset-1" >>> local ds2 "c/data/newdata/dataset-2" // etc. >>> >>> local all ds1 ds2 >>> >>> foreach x in `all' { >>> use `x', clear >>> >>> include tasks1 >>> include tasks2 >>> include tasks3 >>> >>> save `x'_new, replace >>> } >>> ********************************* >>> >>> Steve >>> >>> >>> On May 27, 2013, at 3:19 PM, Michael Stewart wrote: >>> >>> Hi >>> I am trying to find a way to work multiple files successively. >>> I have multiple large files(really large) placed in different directories >>> I am trying to find a way to load each file into stata, complete bunch >>> of same datamagement tasks,create a new file from it and places them >>> in a common folder >>> >>> I could use a dofile and do something like >>> >>> clear >>> use c\data\dataset-1 >>> datamagement tasks >>> datamagement tasks >>> datamagement tasks >>> save c\data\dataset-1_new >>> clear >>> use c\data\newdata\dataset-2 >>> datamagement tasks >>> datamagement tasks >>> datamagement tasks >>> save c\data\newdata\dataset-2_new >>> clear >>> >>> But is there an elegant and simpler way to do it given that I have >>> nearly 15 files to do data management tasks. >>> >>> Can we use foreach loop / forvalues loop or anything like that .Please suggest > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/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/faqs/resources/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/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/