views:

878

answers:

6

As a base SAS programmer, you know the drill:

You submit your SAS code, which contains an unbalanced quote, so now you've got not only and unclosed quote, but also unclosed comments, macro function definitions, and a missing run; or quit; statement.

What's your best trick for not having those unbalanced quotes bother you?

+5  A: 

As for myself, I usually Google for "SAS unbalanced quote", and end up with submitting something like this:

*); */; /*’*/ /*”*/; %mend;

... to break out of unclosed comments, quotes and macro functions.

Martin Bøgelund
A: 

Yes, I believe the official SAS documentation recommends the solution you have proposed for yourself.

Anindya
I believe to have seen some one-line solutions to include "run;" and/or "quit;", so I was wondering if my example was complete.
Martin Bøgelund
A: 

You could always just issue a terminate submitted statements command and resubmit what you're trying to run.

CuppM
How do you mean? Is this command line code?
Bazil
+2  A: 

Here is the one I use.

 ;*';*";*/;quit;run;
 ODS _ALL_ CLOSE;
 QUIT; RUN;
AFHood
A: 

just wanted to reiterate AFHood's suggestion to use the ODS _ALL_ CLOSE; statement. That's a key one to include. And make sure you use it every time you're finished with ODS anyway.

robmandu
+1  A: 

enterprise guide 3 used to put the following line at the top of its automatically generated code:

*';*";*/;run;

however, the only way to really "reset" from all kinds of something unbalanced problems is to quit the sas session, and balance whatever is unbalanced before re-submitting the code. Using this kind of quick (cheap?) hacks does not address the root cause.

by the way, ods _all_ close; closes all the ods destinations, including the default, results destination. in an interactive session, you should open it again with ods results; or ods results on; at least according to the documention. but when i tested it on my 9.2, it did not work, as shown below:

%put sysvlong=&sysvlong sysscpl=&sysscpl;
/* sysvlong=9.02.01M0P020508 sysscpl=X64_VSPRO */

ods _all_ close;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

ods results on;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/
Chang Chung