The problem reported is not to do with foreach or regress, but with your use of local macros.
The left and right quotation marks around local macro references differ. Otherwise macro references could not be nested, which would be a severe problem. This is documented, e.g. [U] 18.3.1 in PDF documentation.
There are other problems with your code. Let's fix it first, using the correct quotation marks and fixing another syntax error:
local Region "1 2 3 4 5 6"
foreach i of local Region {
reg x1 x2 x3 if Region == `i'
}
The assumption here is that you have a variable called Region and you are also defining a local macro with the same name. If that's true and some other assumptions are true, the above should work. Note how the macro name is not referenced in the call to foreach.
Note incidentally that this example can be simplified. Defining a local macro here is like putting objects into a bag only to take them out immediately afterwards. You don't need to do that.
foreach i in 1 2 3 4 5 6 {
reg x1 x2 x3 if Region == `i'
}
Further, when the list is this simple, you can use forvalues instead:
forval i = 1/6 {
reg x1 x2 x3 if Region == `i'
}
All that aside, check out statsby to see if it helps.
In summary:
Syntax error: Use different quotation marks in referring to local macros.
Syntax error: In looping with foreach over the elements of a local macro, name it, don't reference it.
Style error: Don't use local macros you don't need.
Style error: Use forvalues instead of foreach when it's equivalent.
foreach i of local 'Region'should beforeach i of local Region. Also, you can omit " " while defining local.