BookmarkSubscribeRSS Feed
somira
Calcite | Level 5

I am new to SAS and  programming and I  have been working with SAS for more than a month.

But this week , my SAS code has neither an error or any output. The results tab is empty too. These are some of the warnings that i saw in the log:

"The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks "

 

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.
Can somebody suggest what's wrong
Thanks

 

7 REPLIES 7
PaigeMiller
Diamond | Level 26

Show us the entire log, down to (and including) the part where it says: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks 

--
Paige Miller
somira
Calcite | Level 5
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
2 TITLE;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
3 FOOTNOTE;
4 OPTIONS LOCALE=en_US DFLANG=LOCALE;
5 DATA _NULL_;
6 RUN;
7 OPTIONS VALIDVARNAME=ANY;
8 OPTIONS VALIDMEMNAME=EXTEND;
9 FILENAME _HTMLOUT TEMP;
10 FILENAME _GSFNAME TEMP;
11 FILENAME _DATAOUT TEMP;
12 %LET SYSCC=0;
13 %LET _CLIENTAPP='SAS Studio';
14 %LET _CLIENTAPPABREV=Studio;
15 %LET _CLIENTAPPVERSION=3.8;
16 %LET _CLIENTVERSION=3.8;
17 %LET _CLIENTMODE=wip;
18 %LET _SASSERVERNAME=%BQUOTE(SASApp);
19 %LET _SASHOSTNAME=%BQUOTE(odaws01-usw2-2);
20 %LET _SASPROGRAMFILEHOST=%BQUOTE(odaws01-usw2-2);
21 %LET _CLIENTUSERID=%BQUOTE(u62193446);
22 %LET _CLIENTUSERNAME=%BQUOTE(u62193446);
23 %LET CLIENTMACHINE=%BQUOTE(096-035-054-050.RES.SPECTRUM.COM);
24 %LET _CLIENTMACHINE=%BQUOTE(096-035-054-050.RES.SPECTRUM.COM);
25 %let SASWORKLOCATION="%sysfunc(getoption(work))/";
26 FILENAME _CWD '.';
27 DATA _NULL_;
28 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD'));
29 RUN;
30 FILENAME _CWD;
31
32 %LET _SASPROGRAMFILE = %NRQUOTE(%NRSTR(/home/u62193446/Week6/Project6.sas));
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
 
________________________________________________________________________________________________________________________
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.
34 %LET _EXECENV=SASStudio;
35 DATA _NULL_;
36 CALL
36 ! SYMPUT("GRAPHINIT"
_
49
36 ! ,"");
37 CALL
37 ! SYMPUT("GRAPHTERM"
_
49
37 ! ,"");
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.
38 RC=TSLVL('SASXGOPT','N');
39 _ERROR_=0;
40 IF (RC^=' ') THEN DO;
41 CALL SYMPUT("GRAPHINIT","GOPTIONS RESET=ALL GSFNAME=_GSFNAME;");
___ ________________
49 49
42 CALL SYMPUT("GRAPHTERM","GOPTIONS NOACCESSIBLE;");
___ ___________________________________
49 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.
43 END;
44 RUN;
45 DATA _NULL_;
46 RC=SYSPROD("PRODNUM002"
_
49
46 ! );
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.
47 IF (RC^=1) THEN DO;
48 CALL
48 ! SYMPUT("GRAPHINIT"
_
49
48 ! ,"");
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.
49 CALL SYMPUT("GRAPHTERM","");
50 END;
51 RUN;
52 %LET _DATAOUT_MIME_TYPE=;
53 %LET _DATAOUT_NAME=;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
54 %LET _DATAOUT_TABLE=;
55 %LET _DATAOUT_URL=;
56 %SYMDEL _DATAOUT_MIME_TYPE _DATAOUT_NAME _DATAOUT_URL _DATAOUT_TABLE;
57 %LET _SASWS_ = %BQUOTE(/home/u62193446);
58 %LET _SASWSTEMP_=%BQUOTE(/home/u62193446/.sasstudio/.images/de4be329-08f3-43d7-9756-cdf75a8e35b3);
59 ODS LISTING CLOSE;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
60 ODS AUTONAVIGATE OFF;
61 ODS GRAPHICS ON;
62 ODS HTML5 (ID=WEB) DEVICE=PNG GPATH="&_SASWSTEMP_" ENCODING=utf8 FILE=_HTMLOUT (TITLE='Results: Project6.sas')
62 ! STYLE=Htmlblue OPTIONS(BITMAP_MODE='INLINE' OUTLINE='ON' SVG_MODE='INLINE'
62 ! CSS_PREFIX='.ods_de4be329-08f3-43d7-9756-cdf75a8e35b3' BODY_ID='div_de4be329-08f3-43d7-9756-cdf75a8e35b3' );
63 &GRAPHINIT;
64 OPTIONS FIRSTOBS=1;
65 OPTIONS OBS=MAX;
66 OPTIONS DTRESET DATE NUMBER NOTES;
67 %put %bquote(NOTE: ODS statements in the SAS Studio environment may disable some output features.);
68 OPTIONS NOTES STIMER SOURCE NOSYNTAXCHECK;
69
70
71 * Problem - MACROS;
72 *1.1 Use %LET to create a macro variable named ClassAge, assigning to it a value of Pre-K 4;
73
74 %LET ClassAge = Pre-K 4;
75
76 *------------------------------------------------------------------------------------------------------------------------
76 ! ---------------------------------;
77
78 *1.2 Read the data set from the file '/folders/myfolders/Week6/School 1 final.csv' and name it final.;
79 * Then use IF to subset with the macro variable &ClassAge. Name the subset as ClassAge_final. Print it;
80 * using the macro variable in TITLE. ;
81 LIBNAME Week6 '/home/u62193446/Week6';
82 DATA final;
83 INFILE '/home/u62193446/Week6/school 1 finale.csv' DSD FIRSTOBS = 2;
84 INPUT ClassIDChildIDGender$ClassAge$Language$f1f2f3f4;
85 IF ClassAge = "&ClassAge";
86 RUN;
87
88 PROC PRINT DATA = final;
89 TITLE "&ClassAge_final";
90 RUN;
91
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
92
93
94 *------------------------------------------------------------------------------------------------------------------------
94 ! ----------------------------------;
95
96 *1.3 Create a macro named average with two parameters category and question. In the macro, firstly;
97 *apply PROC MEANS for the data set final to calculate the mean of &question by &category. In the PROC MEANS,;
98 *use option NOPRINT, and let OUT=averagescore. Then apply PROC PRINT to print the data averagescore using;
99 *the macro variables in the TITLE.;
100
101 %MACRO average(category=, question=);
102
103
104 PROC MEANS DATA = final MEAN NOPRINT;
105 CLASS &category;
106 VAR &question;
107 OUTPUT OUT = averagescore;
108 RUN;
109
110
111 PROC PRINT DATA = averagescore;
112 TITLE "&category &questions";
113 RUN;
114 %MEND average;
115
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
116 *------------------------------------------------------------------------------------------------------------------------
116 ! ------------------------------;
117
118 * 1.4 Invoke the macro %average(category=Gender, question=f1).;
119
120 %MACRO average(category=Gender, question=f1);
121
122
123 *------------------------------------------------------------------------------------------------------------------------
123 ! -------------------------------;
124
125
126 *1.5Invoke the macro %average(category= ClassAge, question=f3);
127 %MACRO average(category= ClassAge, question=f3);
128
129 *------------------------------------------------------------------------------------------------------------------------
129 ! --------------------------------;
130
131 *1.6 Create a macro named class with one parameter category. In the macro, use %IF &category =Gender;
132 *%THEN %DO; PROC MEANS for the data final to calculate the mean of the variable f1 by &category.;
133 *%ELSE %IF &category =ClassAge %THEN %DO; PROC MEANS for the data final to calculate the mean of the;
134 * variable f2 by &category.;
135
136 %MACRO class(category=);
137 %IF &category =Gender*%THEN %DO;
138 PROC MEANS DATA = final MEAN MAXDEC=0 ;
139 VAR f1;
140 BY &category;
141 RUN;
142 %END;
143
144 %ELSE %IF &category = ClassAge %THEN %DO;
145 PROC MEANS DATA = final MEAN MAXDEC=0;
146 VAR f2;
147 BY &category;
148 TITLE "&category for f1 and f2";
149 RUN;
150
151 %END;
152 %MEND category;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
153
154 *------------------------------------------------------------------------------------------------------------------------
154 ! ----------------------------------;
155
156 *1.7Call the macro %class(category=Gender);
157 %MACRO class(category=Gender);
158
159 *------------------------------------------------------------------------------------------------------------------------
159 ! ----------------------------------;
160
161 *1.8Call the macro %class(category=ClassAge);
162 %MACRO class(category=ClassAge);
163
164
165 *************************************************************************************************************************
165 ! *********************************;
166 * Problem - 2 Visualisation;
167 *************************************************************************************************************************
167 ! *********************************;
168 *2.1Read the data from the file: '/folders/myfolders/Week6/2010-2015-Age65above Final Death Count.csv';
169 *with INPUT year month gender $ age ICD10 $ death; Name the data as death_count.;
170
171 LIBNAME Week6 '/home/u62193446/Week6';
172 DATA death_count;
173 INFILE '/home/u62193446/Week6/2010-2015-Age65above Final Death Counts.csv' DSD FIRSTOBS = 2;
174 INPUT year month gender $ age ICD10 $ death;
175 RUN;
176
177 *------------------------------------------------------------------------------------------------------------------------
177 ! -----------------------------------;
178 *2.2Use PROC MEANS to get the total death of each year.;
179 *Create a horizontal Bar Chart for the total death of each year.;
180
181
182 proc means data = death_count noprint;
183 var death;
184 class year;
185 output OUT = death_by_year
186 SUM(death) = total_death;
187 TITLE 'Total Death by Year';
188 RUN;
189
190
191 * Bar chart for total death for each year;
192 PROC SGPLOT DATA = death_count;
193 HBAR year / STAT=SUM RESPONSE =death;
194 TITLE1 'Total Death By Year';
195
196 RUN;
197 *------------------------------------------------------------------------------------------------------------------------
197 ! -----------------------------------;
198
199 *2.3 Use PROC MEANS to get total death by ICD10. Create a scatter plot for the total death by ICD 10.;
200 *Label the x-axis as ‘Death Code’, y-axis as ‘Total Death’, and save the graph as;
201 * ‘Scatter plot total death by Death Code.png’;
202
203 proc means data = death_count noprint;
204 var death;
205 class ICD10;
206 output OUT = death_by_ICD
207 SUM(death) = total_death;
208 TITLE 'Total Death by ICD';
209 RUN;
210
211
212 *Creating Scatter plot;
213
214 ODS LISTING GPATH ='/home/u62193446/Week6';
215 ODS GRAPHICS / RESET
216 IMAGENAME = 'Scatterplot totaldeath by Deathcode'
217 OUTPUTFMT = PNG
218 HEIGHT = 3IN WIDTH = 6IN;
219
220 proc sgplot data=death_count;
221 scatter x=ICD10 y=death /;
222 xaxis grid;
223 yaxis grid;
224 run;
225 *------------------------------------------------------------------------------------------------------------------------
225 ! -----------------------------------;
226
227 *2.4Create a histogram for the death where the ICD=52.;
228
229 *read select and save icd10 data rows;
230 LIBNAME Week6 '/home/u62193446/Week6';
231 DATA death_count;
232 INFILE '/home/u62193446/Week6/2010-2015-Age65above Final Death Counts.csv' DSD FIRSTOBS = 2;
233 INPUT year month gender $ age ICD10 $ death;
234 RUN;
235
236 * subquery;
237 proc sql;
238 title 'icd10';
148 TITLE "&category for f1 and f2";
__
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.
 
239 select ICD10 , death
240 from Work.death_count;
241 where ICD10 =
242 (select ICD10 from Work.death_count
243 where ICD10 = "52");
244 quit;
245
246
247
248 proc sgplot data=WORK.DEATH_COUNT;
249 histogram death /;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
250 yaxis grid;
251 run;
252 *------------------------------------------------------------------------------------------------------------------------
252 ! ----------------------------------;
253
254 *2.5Create a vertical box plot for the death with category =gender.;
255 PROC SGPLOT DATA = death_count;
256 VBOX death/ CATEGORY = gender;
257 TITLE 'Vertical Boxplot Death by Gender';
258 RUN;
259 *------------------------------------------------------------------------------------------------------------------------
259 ! ----------------------------------;
260
261 *2.6Create a horizontal box plot for the death with category =month. Save the graph as;
262 *‘Boxplot death by month.png’.;
263
264
265 * Create box plot;
266 ODS LISTING GPATH ='/home/u62193446/Week6';
267 ODS GRAPHICS / RESET
268 IMAGENAME = 'Boxplot death by Month'
269 OUTPUTFMT = PNG
270 HEIGHT = 3IN WIDTH = 6IN;
271
272 PROC SGPLOT DATA = death_count;
273 HBOX death/ CATEGORY = month;
274 TITLE 'Horizontal Boxplot Death by Month';
275 RUN;
276
277
278 *########################################################################################################################
278 ! ##################################;
279
280
281
282 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
283 ODS HTML CLOSE;
284 &GRAPHTERM; ;*';*";*/;RUN;QUIT;
285 QUIT;RUN;
286 ODS HTML5 (ID=WEB) CLOSE;
287
288 FILENAME _GSFNAME;
289 DATA _NULL_;
290 RUN;
291 OPTIONS NOTES STIMER SOURCE SYNTAXCHECK;
292
 
User: u62193446
Messages: 3
 
 
 
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
2 TITLE;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
3 FOOTNOTE;
4 OPTIONS LOCALE=en_US DFLANG=LOCALE;
5 DATA _NULL_;
6 RUN;
7 OPTIONS VALIDVARNAME=ANY;
8 OPTIONS VALIDMEMNAME=EXTEND;
9 FILENAME _HTMLOUT TEMP;
10 FILENAME _GSFNAME TEMP;
11 FILENAME _DATAOUT TEMP;
12 %LET SYSCC=0;
13 %LET _CLIENTAPP='SAS Studio';
14 %LET _CLIENTAPPABREV=Studio;
15 %LET _CLIENTAPPVERSION=3.8;
16 %LET _CLIENTVERSION=3.8;
17 %LET _CLIENTMODE=wip;
18 %LET _SASSERVERNAME=%BQUOTE(SASApp);
19 %LET _SASHOSTNAME=%BQUOTE(odaws01-usw2-2);
20 %LET _SASPROGRAMFILEHOST=%BQUOTE(odaws01-usw2-2);
21 %LET _CLIENTUSERID=%BQUOTE(u62193446);
22 %LET _CLIENTUSERNAME=%BQUOTE(u62193446);
23 %LET CLIENTMACHINE=%BQUOTE(096-035-054-050.RES.SPECTRUM.COM);
24 %LET _CLIENTMACHINE=%BQUOTE(096-035-054-050.RES.SPECTRUM.COM);
25 %let SASWORKLOCATION="%sysfunc(getoption(work))/";
26 FILENAME _CWD '.';
27 DATA _NULL_;
28 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD'));
29 RUN;
30 FILENAME _CWD;
31
32 %LET _SASPROGRAMFILE = %NRQUOTE(%NRSTR(/home/u62193446/Week6/Project6.sas));
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
 
________________________________________________________________________________________________________________________
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.
34 %LET _EXECENV=SASStudio;
35 DATA _NULL_;
36 CALL
36 ! SYMPUT("GRAPHINIT"
_
49
36 ! ,"");
37 CALL
37 ! SYMPUT("GRAPHTERM"
_
49
37 ! ,"");
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.
38 RC=TSLVL('SASXGOPT','N');
39 _ERROR_=0;
40 IF (RC^=' ') THEN DO;
41 CALL SYMPUT("GRAPHINIT","GOPTIONS RESET=ALL GSFNAME=_GSFNAME;");
___ ________________
49 49
42 CALL SYMPUT("GRAPHTERM","GOPTIONS NOACCESSIBLE;");
___ ___________________________________
49 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.
43 END;
44 RUN;
45 DATA _NULL_;
46 RC=SYSPROD("PRODNUM002"
_
49
46 ! );
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.
47 IF (RC^=1) THEN DO;
48 CALL
48 ! SYMPUT("GRAPHINIT"
_
49
48 ! ,"");
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.
49 CALL SYMPUT("GRAPHTERM","");
50 END;
51 RUN;
52 %LET _DATAOUT_MIME_TYPE=;
53 %LET _DATAOUT_NAME=;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
54 %LET _DATAOUT_TABLE=;
55 %LET _DATAOUT_URL=;
56 %SYMDEL _DATAOUT_MIME_TYPE _DATAOUT_NAME _DATAOUT_URL _DATAOUT_TABLE;
57 %LET _SASWS_ = %BQUOTE(/home/u62193446);
58 %LET _SASWSTEMP_=%BQUOTE(/home/u62193446/.sasstudio/.images/de4be329-08f3-43d7-9756-cdf75a8e35b3);
59 ODS LISTING CLOSE;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
60 ODS AUTONAVIGATE OFF;
61 ODS GRAPHICS ON;
62 ODS HTML5 (ID=WEB) DEVICE=PNG GPATH="&_SASWSTEMP_" ENCODING=utf8 FILE=_HTMLOUT (TITLE='Results: Project6.sas')
62 ! STYLE=Htmlblue OPTIONS(BITMAP_MODE='INLINE' OUTLINE='ON' SVG_MODE='INLINE'
62 ! CSS_PREFIX='.ods_de4be329-08f3-43d7-9756-cdf75a8e35b3' BODY_ID='div_de4be329-08f3-43d7-9756-cdf75a8e35b3' );
63 &GRAPHINIT;
64 OPTIONS FIRSTOBS=1;
65 OPTIONS OBS=MAX;
66 OPTIONS DTRESET DATE NUMBER NOTES;
67 %put %bquote(NOTE: ODS statements in the SAS Studio environment may disable some output features.);
68 OPTIONS NOTES STIMER SOURCE NOSYNTAXCHECK;
69
70
71 * Problem - MACROS;
72 *1.1 Use %LET to create a macro variable named ClassAge, assigning to it a value of Pre-K 4;
73
74 %LET ClassAge = Pre-K 4;
75
76 *------------------------------------------------------------------------------------------------------------------------
76 ! ---------------------------------;
77
78 *1.2 Read the data set from the file '/folders/myfolders/Week6/School 1 final.csv' and name it final.;
79 * Then use IF to subset with the macro variable &ClassAge. Name the subset as ClassAge_final. Print it;
80 * using the macro variable in TITLE. ;
81 LIBNAME Week6 '/home/u62193446/Week6';
82 DATA final;
83 INFILE '/home/u62193446/Week6/school 1 finale.csv' DSD FIRSTOBS = 2;
84 INPUT ClassIDChildIDGender$ClassAge$Language$f1f2f3f4;
85 IF ClassAge = "&ClassAge";
86 RUN;
87
88 PROC PRINT DATA = final;
89 TITLE "&ClassAge_final";
90 RUN;
91
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
92
93
94 *------------------------------------------------------------------------------------------------------------------------
94 ! ----------------------------------;
95
96 *1.3 Create a macro named average with two parameters category and question. In the macro, firstly;
97 *apply PROC MEANS for the data set final to calculate the mean of &question by &category. In the PROC MEANS,;
98 *use option NOPRINT, and let OUT=averagescore. Then apply PROC PRINT to print the data averagescore using;
99 *the macro variables in the TITLE.;
100
101 %MACRO average(category=, question=);
102
103
104 PROC MEANS DATA = final MEAN NOPRINT;
105 CLASS &category;
106 VAR &question;
107 OUTPUT OUT = averagescore;
108 RUN;
109
110
111 PROC PRINT DATA = averagescore;
112 TITLE "&category &questions";
113 RUN;
114 %MEND average;
115
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
116 *------------------------------------------------------------------------------------------------------------------------
116 ! ------------------------------;
117
118 * 1.4 Invoke the macro %average(category=Gender, question=f1).;
119
120 %MACRO average(category=Gender, question=f1);
121
122
123 *------------------------------------------------------------------------------------------------------------------------
123 ! -------------------------------;
124
125
126 *1.5Invoke the macro %average(category= ClassAge, question=f3);
127 %MACRO average(category= ClassAge, question=f3);
128
129 *------------------------------------------------------------------------------------------------------------------------
129 ! --------------------------------;
130
131 *1.6 Create a macro named class with one parameter category. In the macro, use %IF &category =Gender;
132 *%THEN %DO; PROC MEANS for the data final to calculate the mean of the variable f1 by &category.;
133 *%ELSE %IF &category =ClassAge %THEN %DO; PROC MEANS for the data final to calculate the mean of the;
134 * variable f2 by &category.;
135
136 %MACRO class(category=);
137 %IF &category =Gender*%THEN %DO;
138 PROC MEANS DATA = final MEAN MAXDEC=0 ;
139 VAR f1;
140 BY &category;
141 RUN;
142 %END;
143
144 %ELSE %IF &category = ClassAge %THEN %DO;
145 PROC MEANS DATA = final MEAN MAXDEC=0;
146 VAR f2;
147 BY &category;
148 TITLE "&category for f1 and f2";
149 RUN;
150
151 %END;
152 %MEND category;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
153
154 *------------------------------------------------------------------------------------------------------------------------
154 ! ----------------------------------;
155
156 *1.7Call the macro %class(category=Gender);
157 %MACRO class(category=Gender);
158
159 *------------------------------------------------------------------------------------------------------------------------
159 ! ----------------------------------;
160
161 *1.8Call the macro %class(category=ClassAge);
162 %MACRO class(category=ClassAge);
163
164
165 *************************************************************************************************************************
165 ! *********************************;
166 * Problem - 2 Visualisation;
167 *************************************************************************************************************************
167 ! *********************************;
168 *2.1Read the data from the file: '/folders/myfolders/Week6/2010-2015-Age65above Final Death Count.csv';
169 *with INPUT year month gender $ age ICD10 $ death; Name the data as death_count.;
170
171 LIBNAME Week6 '/home/u62193446/Week6';
172 DATA death_count;
173 INFILE '/home/u62193446/Week6/2010-2015-Age65above Final Death Counts.csv' DSD FIRSTOBS = 2;
174 INPUT year month gender $ age ICD10 $ death;
175 RUN;
176
177 *------------------------------------------------------------------------------------------------------------------------
177 ! -----------------------------------;
178 *2.2Use PROC MEANS to get the total death of each year.;
179 *Create a horizontal Bar Chart for the total death of each year.;
180
181
182 proc means data = death_count noprint;
183 var death;
184 class year;
185 output OUT = death_by_year
186 SUM(death) = total_death;
187 TITLE 'Total Death by Year';
188 RUN;
189
190
191 * Bar chart for total death for each year;
192 PROC SGPLOT DATA = death_count;
193 HBAR year / STAT=SUM RESPONSE =death;
194 TITLE1 'Total Death By Year';
195
196 RUN;
197 *------------------------------------------------------------------------------------------------------------------------
197 ! -----------------------------------;
198
199 *2.3 Use PROC MEANS to get total death by ICD10. Create a scatter plot for the total death by ICD 10.;
200 *Label the x-axis as ‘Death Code’, y-axis as ‘Total Death’, and save the graph as;
201 * ‘Scatter plot total death by Death Code.png’;
202
203 proc means data = death_count noprint;
204 var death;
205 class ICD10;
206 output OUT = death_by_ICD
207 SUM(death) = total_death;
208 TITLE 'Total Death by ICD';
209 RUN;
210
211
212 *Creating Scatter plot;
213
214 ODS LISTING GPATH ='/home/u62193446/Week6';
215 ODS GRAPHICS / RESET
216 IMAGENAME = 'Scatterplot totaldeath by Deathcode'
217 OUTPUTFMT = PNG
218 HEIGHT = 3IN WIDTH = 6IN;
219
220 proc sgplot data=death_count;
221 scatter x=ICD10 y=death /;
222 xaxis grid;
223 yaxis grid;
224 run;
225 *------------------------------------------------------------------------------------------------------------------------
225 ! -----------------------------------;
226
227 *2.4Create a histogram for the death where the ICD=52.;
228
229 *read select and save icd10 data rows;
230 LIBNAME Week6 '/home/u62193446/Week6';
231 DATA death_count;
232 INFILE '/home/u62193446/Week6/2010-2015-Age65above Final Death Counts.csv' DSD FIRSTOBS = 2;
233 INPUT year month gender $ age ICD10 $ death;
234 RUN;
235
236 * subquery;
237 proc sql;
238 title 'icd10';
148 TITLE "&category for f1 and f2";
__
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.
 
239 select ICD10 , death
240 from Work.death_count;
241 where ICD10 =
242 (select ICD10 from Work.death_count
243 where ICD10 = "52");
244 quit;
245
246
247
248 proc sgplot data=WORK.DEATH_COUNT;
249 histogram death /;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
250 yaxis grid;
251 run;
252 *------------------------------------------------------------------------------------------------------------------------
252 ! ----------------------------------;
253
254 *2.5Create a vertical box plot for the death with category =gender.;
255 PROC SGPLOT DATA = death_count;
256 VBOX death/ CATEGORY = gender;
257 TITLE 'Vertical Boxplot Death by Gender';
258 RUN;
259 *------------------------------------------------------------------------------------------------------------------------
259 ! ----------------------------------;
260
261 *2.6Create a horizontal box plot for the death with category =month. Save the graph as;
262 *‘Boxplot death by month.png’.;
263
264
265 * Create box plot;
266 ODS LISTING GPATH ='/home/u62193446/Week6';
267 ODS GRAPHICS / RESET
268 IMAGENAME = 'Boxplot death by Month'
269 OUTPUTFMT = PNG
270 HEIGHT = 3IN WIDTH = 6IN;
271
272 PROC SGPLOT DATA = death_count;
273 HBOX death/ CATEGORY = month;
274 TITLE 'Horizontal Boxplot Death by Month';
275 RUN;
276
277
278 *########################################################################################################################
278 ! ##################################;
279
280
281
282 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
283 ODS HTML CLOSE;
284 &GRAPHTERM; ;*';*";*/;RUN;QUIT;
285 QUIT;RUN;
286 ODS HTML5 (ID=WEB) CLOSE;
287
288 FILENAME _GSFNAME;
289 DATA _NULL_;
290 RUN;
291 OPTIONS NOTES STIMER SOURCE SYNTAXCHECK;
292
 
User: u62193446
Messages: 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SASKiwi
PROC Star

Your unbalanced quotes problem starts before the log you have posted. Follow @Kurt_Bremser 's instructions and start a new SAS session, then try running your program again after checking for unbalanced quotes.

ballardw
Super User

I have a suspicion that your issue partially revolves around the MACRO code and the use of this

131 *1.6 Create a macro named class with one parameter category. In the macro, use %IF &category =Gender;
132 *%THEN %DO; PROC MEANS for the data final to calculate the mean of the variable f1 by &category.;
133 *%ELSE %IF &category =ClassAge %THEN %DO; PROC MEANS for the data final to calculate the mean of the;
134 * variable f2 by &category.;

The macro processor does not treat comments in code that in the * <some text> ; form as the rest of the SAS code.

You should either use %* <some text>; style in line macro comments or the /*  */ form of comments.

 

When things involving macros misbehave part of the debugging process is to see what the macro processor is generating. That is accomplished by setting system options MPRINT and possibly SYMBOLGEN and MLOGIC.

So in addition to starting a fresh session before running the code involving the macro add this line before the macro execution:

Options mprint;

This will have the log include the text generated by the macro.

Turn off using:

options nomprint;

The Symbolgen option turns on more details about how macro variables are resolved and may be needed with some complex variable creation, Mlogic reports a bit more about how logical comparisons in the macro are resolved.

Tom
Super User Tom
Super User

This is also very strange and will cause all kinds of trouble.

156 *1.7Call the macro %class(category=Gender);
157 %MACRO class(category=Gender);
158
159 *------------------------------------------------------------------------------------------------------------------------
159 ! ----------------------------------;
160
161 *1.8Call the macro %class(category=ClassAge);
162 %MACRO class(category=ClassAge);

First you are calling the %CLASS() macro in the middle of a statement comment. So the code it generates will become part of the statement comment up to the end of the first statement the macro generates.

 

Second you are nesting to attempts to DEFINE the macro CLASS inside of each other.  I suspect you meant to actually call the macro CLASS there and not re-define it.

 

You probably want something more like this:

/*
 *1.7Call the macro %class(category=Gender);
*/
%class(category=Gender);

/*
 *1.8Call the macro %class(category=ClassAge);
*/
%class(category=ClassAge);
Kurt_Bremser
Super User

You have multiple %MACRO statements without corresponding %MENDs. This will also cause the "unbalanced" message.

You may have confused macro definitions and macro calls. %MACRO is only needed for defining macros, but NOT for calling them.

Kurt_Bremser
Super User

Start a new session and review ALL your code for unbalanced quotes or other unbalanced stuff (like a %macro definition without a terminating %mend) before you submit it.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 7 replies
  • 834 views
  • 2 likes
  • 6 in conversation