No, because Rust macros are hygienic; they can’t access names declared outside the scope of the macro definition. Unlike C macros, they’re not totally naive textual substitutions.
In addition to what @jdahlstrom said, macro_rules! macros can only expand to complete expressions, items, patterns etc, not partial ones.
That's where the skip1 macro runs into trouble.
The issue is that the break 'label expansion can be called outside of a loop if the macro is called outside a loop, and on top of that the label in your skip1 macro isn't defined. Your revised macro fixes the 2nd issue.
I'm kind of surprised that the revised version works though, because of the 1st issue.
Upon further reflection, the truth for issue 1 is somewhere in the middle: macro_rules macros can also expand to patterns for example, which are never valid outside of the appropriate expressions i.e. match and anything that desugars to it, as well as let and fn parameter bindings.
In the revised version, 'label1 is in scope where the macro is defined, so it remains hygienic: Any use of 'label1 inside the macro refers to that label, regardless of where the macro is used.
break 'label is a complete expression though, so while the argument about expanding to full expressions, types, patterns, or items, is true, it is not the issue here