Title | Backslashes and macros | |
Author | Alan Riley, StataCorp |
Any explanations out there for the following behavior? Stata seems to run into trouble assigning multiple backslash characters to macros:
. local x1 "\" . local x2 "\\" . local x3 "\\\" . local x4 "\\\\" ... . di "[`x1']" [\] . di "[`x2']" [\] . di "[`x3']" [\\] . di "[`x4']" [\\]
This behavior is by design. The backslash character is an escape character for certain other characters.
It is sometimes necessary to prevent macro substitution. If you want to display a macro rather than its contents, you might want to write something like
. display "$myfile"
in the case of a global macro or
. display "`myfile'"
in the case of a local macro. Of course, this won’t work, as Stata will immediately substitute the value of the “myfile” global or local macro and display that instead.
Stata allows you to use the backslash as a protection or “escape” character to prevent macro substitution or to allow delayed macro substitution.
In the examples above, the proper syntax would be
. display "\$myfile" . display "\`myfile'"
to literally display
$myfile `myfile'
This leads to another issue. What if a user really wishes to have a backslash in a command and still have a macro expanded after it? For example,
. use c:\data\`myfile'
Because the backslash is an escape character and prevents macro substitution, Stata will literally try to read a file named c:\data'myfile'. Therefore, the escape character must also be able to escape itself—to tell Stata not to have it escape the opening macro character that might follow:
. use c:\data\\`myfile'
Technical Note:
An alternative is
to use forward slashes (/) when writing paths. Stata will interpret the
forward slash correctly as a path delimiter. For example, you could
type
. use c:/data/`myfile'and avoid the problem altogether. |
Stata’s rules on this protection are simple and consistent:
Anywhere this is typed | Stata sees this |
\$ | $ |
\` | ` |
\\ | \ |
\ | \ (after applying the rules above) |
This is why, in the examples above, every set of two backslashes “collapsed” into a single backslash.
Learn
Free webinars
NetCourses
Classroom and web training
Organizational training
Video tutorials
Third-party courses
Web resources
Teaching with Stata
© Copyright 1996–2024 StataCorp LLC. All rights reserved.
×
We use cookies to ensure that we give you the best experience on our website—to enhance site navigation, to analyze usage, and to assist in our marketing efforts. By continuing to use our site, you consent to the storing of cookies on your device and agree to delivery of content, including web fonts and JavaScript, from third party web services.
Cookie Settings
Last updated: 16 November 2022
StataCorp LLC (StataCorp) strives to provide our users with exceptional products and services. To do so, we must collect personal information from you. This information is necessary to conduct business with our existing and potential customers. We collect and use this information only where we may legally do so. This policy explains what personal information we collect, how we use it, and what rights you have to that information.
These cookies are essential for our website to function and do not store any personally identifiable information. These cookies cannot be disabled.
This website uses cookies to provide you with a better user experience. A cookie is a small piece of data our website stores on a site visitor's hard drive and accesses each time you visit so we can improve your access to our site, better understand how you use our site, and serve you content that may be of interest to you. For instance, we store a cookie when you log in to our shopping cart so that we can maintain your shopping cart should you not complete checkout. These cookies do not directly store your personal information, but they do support the ability to uniquely identify your internet browser and device.
Please note: Clearing your browser cookies at any time will undo preferences saved here. The option selected here will apply only to the device you are currently using.