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

From |
"Nick Cox" <[email protected]> |

To |
<[email protected]> |

Subject |
st: RE: RE: RE: RE: forvalues loop shuts down when asked to "jump over" certain values |

Date |
Mon, 11 Jan 2010 19:07:05 -0000 |

This strategy certainly seems reasonable. That is, there are two broad approaches to this problem. 1. Gather the filenames using Stata or your OS. 2. Cycle over the numeric elements of the filename pattern, checking for validity. You here illustrate #1 assuming Windows (note use of -dir-). People on other platforms could use an equivalent with the command -ls-. Earlier contributions in the thread showed how to do #1 directly in Stata using a macro extended function (or equivalently using the convenience wrapper -fs- from SSC). I agree that focusing on the files (#1) is the better solution to the original problem. My main concern in my previous post was to explain why #2 as attempted by Dorothy did not work well because -forvalues- is best done over integers. Nick [email protected] Kieran McCaul Point taken, Nick, how about this: shell dir *survey.csv > files.txt /A:-D /B clear insheet using files.txt levelsof v1, local(files) foreach f of local files { di in r "`f' " } No need for the -confirm- since if it's in the dir listing then it exists. Nick Cox Invoking -round(,)- is a bit of a red herring here. It maps one binary approximation of a decimal number to another binary approximation and can't by itself solve the fundamental problem that most calculations that are exact in decimal are _not_ exact in binary. Consider . di %20.18f 1/10 0.100000000000000010 . di %20.18f round(1/10, 0.1) 0.100000000000000010 You may think 0.1 should be easy to hold, but you are not a binary computer! Above, and also in Kieran's example, the calls to -round(,)- will do nothing -- which means no harm too. Inspection of the archives shows many emails saying in effect don't do what Dorothy did. We'll run a Tip in Stata Journal 10(1) spelling out the pitfall and what to do instead. My best advice is 0. Always remember: You may think decimal, but Stata works in binary. 1. Loop over integers if at all possible. 2. Never depend on arithmetic with non-integers yielding exact decimal results. Here's one approach that respects all those: forvalues i = 1/13 { forval j = 1/100 { local J : di %02.0f `j' capture confirm file `i'.`J'SURVEY.csv if _rc == 0 { <blah blah blah> } } } That's more complicated than Kieran's code, but I think more robust too. Kieran McCaul try the following: forvalues i = 101(1)1301 { local j = round(`i'/100,0.01) capture confirm file `j'SURVEY.csv if _rc==0 { blah blah blah }} Dorothy Bridges I have a forvalues loop along the following lines: forvalues i = 1.01(.01)13.01 { capture confirm file `i'SURVEY.csv if _rc==0 { blah blah blah } } My list of files is along the lines of: 1.01SURVEY.csv 1.02SURVEY.csv 1.03SURVEY.csv 1.04DATA.csv 1.05SURVEY.csv. The loop works perfectly for the first three files, then stops when it gets to 1.04DATA ... I want it to go on to 1.05SURVEY. I attempted to solve this problem with the capture confirm line, but no luck. I think I need another expression along the lines of, "if _rc~=0, (continue the loop)". * * 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/

**References**:**st: forvalues loop shuts down when asked to "jump over" certain values***From:*Dorothy Bridges <[email protected]>

**st: RE: forvalues loop shuts down when asked to "jump over" certain values***From:*"Kieran McCaul" <[email protected]>

**st: RE: RE: forvalues loop shuts down when asked to "jump over" certain values***From:*"Nick Cox" <[email protected]>

**st: RE: RE: RE: forvalues loop shuts down when asked to "jump over" certain values***From:*"Kieran McCaul" <[email protected]>

- Prev by Date:
**Re: st: Creating maps with Stata 8?** - Next by Date:
**st: RE: RE: bootstrap on two equations** - Previous by thread:
**st: RE: RE: RE: forvalues loop shuts down when asked to "jump over" certain values** - Next by thread:
**st: different behavior of -rownumb()- function in Stata 11 and Stata 10 (9, 8)** - Index(es):

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