Hi everyone, I am using the WRDS MACRO to calculate betas. Please find the code attached below.
When I run this macro on my own (without changing anything) I get the follow errors (please see attached photos).
I am not really sure how to address the notes and errors because it is underlying things I do not see in the original code. Does anyone have any tips on what I could do?
Please COPY/PASTE the log texts into windows opened with the </> button. No need for pictures or attachments when the logs are just a handful of lines.
NOTE: The quoted string currently being processed has become more than 262
bytes long. You might have unbalanced quotation marks.
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
2 TITLE;
3 FOOTNOTE;
4 OPTIONS LOCALE=en_US DFLANG=LOCALE;
5 DATA _NULL_;
103 &GRAPHTERM; ;*';*";*/;RUN;QUIT;
_________________
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
6 RUN;
7 OPTIONS VALIDVARNAME=ANY;
8 OPTIONS VALIDMEMNAME=EXTEND;
9 FILENAME _HTMLOUT TEMP;
10 FILENAME _RTFOUT TEMP ENCODING='UTF-8';
10 FILENAME _RTFOUT TEMP ENCODING='UTF-8';
__
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
11 FILENAME _PDFOUT TEMP;
12 FILENAME _GSFNAME TEMP;
13 FILENAME _DATAOUT TEMP;
14 %LET SYSCC=0;
15 %LET _CLIENTAPP='SAS Studio';
16 %LET _CLIENTAPPABREV=Studio;
17 %LET _CLIENTAPPVERSION=3.81;
18 %LET _CLIENTVERSION=3.81;
NOTE: The quoted string currently being processed has become more than 262
bytes long. You might have unbalanced quotation marks.
19 %LET _CLIENTMODE=basic;
20 %LET _SASSERVERNAME=%BQUOTE(localhost);
21 %LET _SASHOSTNAME=%BQUOTE(wrds-sas9-w);
22 %LET _SASPROGRAMFILEHOST=%BQUOTE(wrds-sas9-w);
23 %LET _CLIENTUSERID=%BQUOTE(jyuan93);
24 %LET _CLIENTUSERNAME=%BQUOTE(Jonathan Yuan);
25 %LET
25 ! CLIENTMACHINE=%BQUOTE(BRAS-BASE-OKVLON0102W-GRC-48-184-147-218-28.DSL
25 ! .BELL.CA);
26 %LET
26 ! _CLIENTMACHINE=%BQUOTE(BRAS-BASE-OKVLON0102W-GRC-48-184-147-218-28.DS
26 ! L.BELL.CA);
27 %let SASWORKLOCATION="%sysfunc(getoption(work))/";
28 FILENAME _CWD '.'
_
49
28 ! ;
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
29 DATA _NULL_;
30 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD'));
____________
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
31 RUN;
32 FILENAME _CWD;
33
34 %LET _SASPROGRAMFILE = %NRQUOTE(%NRSTR(/home/uwaterloo/jyuan93/Pilot
34 ! Test/Beta_test.sas));
NOTE: The quoted string currently being processed has become more than 262
bytes long. You might have unbalanced quotation marks.
35 %LET _BASEURL =
35 ! %BQUOTE(https://wrds-cloud.wharton.upenn.edu/SASStudio/);
30 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD'));
____
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
36 %LET _EXECENV=SASStudio;
37 DATA _NULL_;
38 CALL SYMPUT("GRAPHINIT","");
39 CALL SYMPUT("GRAPHTERM","");
40 RC=TSLVL('SASXGOPT','N');
41 _ERROR_=0;
42 IF (RC^=' ') THEN DO;
43 CALL SYMPUT("GRAPHINIT","GOPTIONS RESET=ALL GSFNAME=_GSFNAME;");
44 CALL SYMPUT("GRAPHTERM","GOPTIONS NOACCESSIBLE;");
45 END;
46 RUN;
47 DATA _NULL_;
48 RC=SYSPROD("PRODNUM002");
49 IF (RC^=1) THEN DO;
NOTE: The quoted string currently being processed has become more than 262
bytes long. You might have unbalanced quotation marks.
50 CALL SYMPUT("GRAPHINIT","");
51 CALL SYMPUT("GRAPHTERM","");
52 END;
53 RUN;
54 %LET _DATAOUT_MIME_TYPE=;
55 %LET _DATAOUT_NAME=;
56 %LET _DATAOUT_TABLE=;
57 %LET _DATAOUT_URL=;
58 %SYMDEL _DATAOUT_MIME_TYPE _DATAOUT_NAME _DATAOUT_URL _DATAOUT_TABLE;
59 %LET _SASWS_ = %BQUOTE(/home/uwaterloo/jyuan93);
42 IF (RC^=' ') THEN DO;
___________
49
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
60 %LET
60 ! _SASWSTEMP_=%BQUOTE(/home/uwaterloo/jyuan93/.sasstudio/.images/5ed268
60 ! 7e-4d7d-4a1e-b927-02d7b8ddf5eb);
61 ODS LISTING CLOSE;
62 ODS AUTONAVIGATE OFF;
63 ODS GRAPHICS ON;
64 ODS HTML5 (ID=WEB) DEVICE=PNG GPATH="&_SASWSTEMP_" ENCODING=utf8
64 ! FILE=_HTMLOUT (TITLE='Results:
64 ! Beta_test.sas') STYLE=Htmlblue OPTIONS(BITMAP_MODE='INLINE'
_______________________________________ ___________
____________
49 49
49
64 ! OUTLINE='ON' SVG_MODE='INLINE'
64 ! CSS_PREFIX='.ods_5ed2687e-4d7d-4a1e-b927-02d7b8ddf5eb'
64 ! BODY_ID='div_5ed2687e-4d7d-4a1e-b927-02d7b8ddf5eb' );
NOTE 49-169: The meaning of an identifier after a quoted string might change in
a future SAS release. Inserting white space between a quoted
string and the succeeding identifier is recommended.
65 ODS RTF (ID=WEB) STYLE=Rtf FILE=_RTFOUT sasdate;
66 ODS PDF (ID=WEB) STYLE=Pearl FILE=_PDFOUT;
67 &GRAPHINIT;
68 OPTIONS FIRSTOBS=1;
69 OPTIONS OBS=MAX;
NOTE: The quoted string currently being processed has become more than 262
bytes long. You might have unbalanced quotation marks.
70 OPTIONS DTRESET DATE NUMBER NOTES;
71 OPTIONS NOTES STIMER SOURCE NOSYNTAXCHECK;
72
73 proc printto log = junk; run;
74 proc expand data=_crsp2 out=_crsp3 method=none;
75 by permno;
76 id date;
77 convert X=X2 / transformout= (MOVUSS &WINDOW.);
78 convert X=X / transformout= (MOVSUM &WINDOW.);
79 convert XY=XY / transformout= (MOVSUM &WINDOW.);
80 convert ret=Y / transformout= (MOVSUM &WINDOW.);
81 convert count=n / transformout= (MOVSUM &WINDOW.);
82 quit;
83 run;
84 proc printto; run;
85
86 data &outset;
87 set _crsp3;
88 if n>=&MINWIN. then beta=(XY-X*Y/n) / (X2-(X**2)/n);
89 label beta = "Stock Beta";
90 label n = "Number of Observations used to compute Beta";
91 drop X X2 XY Y COUNT;
92 format beta comma8.2 ret &index percentn8.2;
93 run;
94
95 /* House Cleaning */
96 proc sql;
97 drop view _crsp1;
98 drop table _crsp2, _crsp3;
99 quit;
100
101 options notes;
102 %put #### DONE . Dataset &outset. Created! ; %put ;
103
104 %MEND BETA;
105
106
107 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
108 ODS HTML CLOSE;
109 &GRAPHTERM; ;*';*";*/;RUN;QUIT;
110 QUIT;RUN;
111 ODS HTML5 (ID=WEB) CLOSE;
112
113 ODS RTF (ID=WEB) CLOSE;
114 ODS PDF (ID=WEB) CLOSE;
115 FILENAME _GSFNAME;
116 DATA _NULL_;
117 RUN;
118 OPTIONS NOTES STIMER SOURCE SYNTAXCHECK;
119
You have had unbalanced single quotes somewhere in the code you submitted earlier. Close the SAS session and start a new one.
Hey KurtBremser, thanks for the help.
I went through the code and I actually dont have any single quotes. Plus, the double quotations looked balanced.
I restarted SAS and the error seems to persist.
Hey Reeza, I doubled checked and the code is copied correctly.
However, is there something I can add that may help the code work?
If you're not famililar with macros here's a beginner level tutorial.
UCLA introductory tutorial on macro variables and macros
https://stats.idre.ucla.edu/sas/seminars/sas-macros-introduction/
Hi! I frequently encounter this kind of error whenever I have unbalanced quotes or accidentally run a SAS macro without the %mend statement. Once I fixed my code, I was just wondering if there's a way to continue working on the same session and not start a new one? There are times when I have so many data on my work library that it would take too much of my time to open a new session and rerun all my codes.
EG generally fixes unmatched quotes by submitting a "magic string". You can also try submitting one yourself, e.g. submit:
;*';*";*/;RUN;QUIT;%mend;
I tend to submit it a few times. If the %mend at the end generates an error, then it's a clue that your session is un-stuck.
I have also came across same error you just have to reset the session by pressing F9 key.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.