Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


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

Re: st: Need help with working with multiple files


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 08:51:28 +0100

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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index