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


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