Hi everyone, I need some help
I have this code and I'm facing the following error:
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
(&I. GE &ATE.)
ERROR: The condition in the %DO %UNTIL loop, %sysevalf(&I. GE &ATE.), yielded an invalid or missing value, . The macro will stop
executing.
ERROR: The macro LOOP_1 will stop executing.
The code:
%MACRO LOOP_1(); PROC SQL; SELECT MAX(CHAVE) /* This is numeric value = 432 */ INTO :ATE FROM SCX.CAMINHO_FORTE_AUX_01; QUIT; PROC SQL; SELECT MIN(CHAVE) /* also a numeric value = 1 */ INTO :I FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0)); QUIT; PROC SQL; CREATE TABLE REDUZ_01 AS SELECT * FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0)); QUIT; %DO %UNTIL (&I. GE &ATE.); DATA SCX.CAMINHO_FORTE_AUX_01_BACK; SET SCX.CAMINHO_FORTE_AUX_01; IF CHAVE_FIM > 0; RUN; DATA REDUZ_01; SET SCX.CAMINHO_FORTE_AUX_01; IF CHAVE_FIM = 0; RUN; %LOOP_2(&I.); PROC SQL; SELECT CASE WHEN MIN(CHAVE) IS NULL THEN &ATE. ELSE MIN(CHAVE) END INTO :I FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE > 1 AND CHAVE_FIM = 0)); QUIT; %END; %MEND; %MACRO LOOP_2(I); PROC SQL; SELECT LCF, LCF_01, LCF_02, LCF_03, UEV INTO :LCF, :LCF_01, :LCF_02, :LCF_03, :UEV FROM CAMINHO_FORTE_AUX_02 WHERE CHAVE=&I.; QUIT; PROC SQL; CREATE TABLE REDUZ_02 AS SELECT * FROM REDUZ_01 WHERE CAMINHO_FORTE_AUX LIKE &LCF_01. AND CAMINHO_FORTE_AUX LIKE &LCF_02. AND CAMINHO_FORTE_AUX LIKE &LCF_03. AND CAMINHO_FORTE_AUX LIKE &UEV.; QUIT; PROC SQL; CREATE TABLE CHAVE_AUX AS SELECT CHAVE FROM REDUZ_02 WHERE CAMINHO_FORTE_AUX LIKE &LCF.; QUIT; PROC SQL; CREATE TABLE CAMINHO_FORTE_AUX_01 AS SELECT *, CASE WHEN TT_EVENTOS_CLIENTE_CF = 1 THEN CHAVE WHEN CHAVE IN (SELECT * FROM CHAVE_AUX) AND CHAVE_FIM = 0 THEN &I. END AS AUX FROM SCX.CAMINHO_FORTE_AUX_01 A; QUIT; DATA SCX.CAMINHO_FORTE_AUX_01 (DROP=AUX); SET CAMINHO_FORTE_AUX_01; IF AUX = &I. AND CHAVE_FIM = 0 THEN CHAVE_FIM = AUX; RUN; %MEND; %LOOP_1();
I tried to use %sysevalf, >=, GE, but with no success.
None of the solutions I found in the internet about this error helped me, I'm totally lost.
Thanks!!
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
&I.>=&ATE.
Please add a command just before the %DO WHILE that prints out the values of the macro variable &i and the macro variable &ate and see what they are. Obviously, one or both of them make doing the comparison impossible.
Please show us the entire log for this macro. Please do NOT show us the errors in the log disconnected from the code.
Insert the command
options mprint;
before you call the macro, run it again and show us the log.
To show us the log properly, and to preserve formatting to make it more readable, copy the log for this macro as text, paste it into the window that appears when you click on the </> icon. This preserves the formatting and makes it more readable. I no longer try to decipher logs that are not formatted properly.
1 The SAS System Wednesday, January 27, 2021 09:11:00 AM
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL='FIO DA MEADA';
4 %LET _CLIENTPROCESSFLOWNAME='Process Flow';
5 %LET _CLIENTPROJECTPATH='d:\Users\z141983\Documents\Claro\Ferramentas Analytics\x_Processamento\02_FIO_DA_MEADA.egp';
6 %LET _CLIENTPROJECTPATHHOST='BCP11N002857';
7 %LET _CLIENTPROJECTNAME='02_FIO_DA_MEADA.egp';
8 %LET _SASPROGRAMFILE='';
9 %LET _SASPROGRAMFILEHOST='';
10
11 ODS _ALL_ CLOSE;
12 OPTIONS DEV=SVG;
13 GOPTIONS XPIXELS=0 YPIXELS=0;
14 %macro HTML5AccessibleGraphSupported;
15 %if %_SAS_VERCOMP_FV(9,4,4, 0,0,0) >= 0 %then ACCESSIBLE_GRAPH;
16 %mend;
17 FILENAME EGHTML TEMP;
18 ODS HTML5(ID=EGHTML) FILE=EGHTML
19 OPTIONS(BITMAP_MODE='INLINE')
20 %HTML5AccessibleGraphSupported
21 ENCODING='utf-8'
22 STYLE=HtmlBlue
23 NOGTITLE
24 NOGFOOTNOTE
25 GPATH=&sasworklocation
26 ;
NOTE: Writing HTML5(EGHTML) Body file: EGHTML
27
28 options mprint;
29
30 %MACRO LOOP_1();
31
32 PROC SQL;
33 SELECT MAX(CHAVE)
34 INTO :ATE
35 FROM SCX.CAMINHO_FORTE_AUX_01;
36 QUIT;
37
38 PROC SQL;
39 SELECT MIN(CHAVE)
40 INTO :I
41 FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0));
42 QUIT;
43
44 PROC SQL;
45 CREATE TABLE REDUZ_01 AS
46 SELECT *
47 FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0));
48 QUIT;
49
50 %DO %UNTIL (&I.>=&ATE.);
51
52 DATA SCX.CAMINHO_FORTE_AUX_01_BACK;
53 SET SCX.CAMINHO_FORTE_AUX_01;
54 IF CHAVE_FIM > 0;
55 RUN;
56
57 DATA REDUZ_01;
2 The SAS System Wednesday, January 27, 2021 09:11:00 AM
58 SET SCX.CAMINHO_FORTE_AUX_01;
59 IF CHAVE_FIM = 0;
60 RUN;
61
62 %LOOP_2(&I.);
63
64 PROC SQL;
65 SELECT CASE WHEN MIN(CHAVE) IS NULL THEN &ATE. ELSE MIN(CHAVE) END
66 INTO :I
67 FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE > 1 AND CHAVE_FIM = 0));
68 QUIT;
69
70 %END;
71
72 %MEND;
73
74 %MACRO LOOP_2(I);
75
76 PROC SQL;
77 SELECT LCF, LCF_01, LCF_02, LCF_03, UEV
78 INTO :LCF, :LCF_01, :LCF_02, :LCF_03, :UEV
79 FROM CAMINHO_FORTE_AUX_02
80 WHERE CHAVE=&I.;
81 QUIT;
82
83 PROC SQL;
84 CREATE TABLE REDUZ_02 AS
85 SELECT *
86 FROM REDUZ_01
87 WHERE CAMINHO_FORTE_AUX LIKE &LCF_01.
88 AND CAMINHO_FORTE_AUX LIKE &LCF_02.
89 AND CAMINHO_FORTE_AUX LIKE &LCF_03.
90 AND CAMINHO_FORTE_AUX LIKE &UEV.;
91 QUIT;
92
93 PROC SQL;
94 CREATE TABLE CHAVE_AUX AS
95 SELECT CHAVE
96 FROM REDUZ_02
97 WHERE CAMINHO_FORTE_AUX LIKE &LCF.;
98 QUIT;
99
100 PROC SQL;
101 CREATE TABLE CAMINHO_FORTE_AUX_01 AS
102 SELECT *,
103 CASE WHEN TT_EVENTOS_CLIENTE_CF = 1 THEN CHAVE
104 WHEN CHAVE IN (SELECT * FROM CHAVE_AUX) AND CHAVE_FIM = 0 THEN &I. END AS AUX
105 FROM SCX.CAMINHO_FORTE_AUX_01 A;
106 QUIT;
107
108 DATA SCX.CAMINHO_FORTE_AUX_01 (DROP=AUX);
109 SET CAMINHO_FORTE_AUX_01;
110 IF AUX = &I. AND CHAVE_FIM = 0 THEN CHAVE_FIM = AUX;
111 RUN;
112
113 %MEND;
114
115 %LOOP_1();
3 The SAS System Wednesday, January 27, 2021 09:11:00 AM
MPRINT(LOOP_1): PROC SQL;
MPRINT(LOOP_1): SELECT MAX(CHAVE) INTO :ATE FROM SCX.CAMINHO_FORTE_AUX_01;
MPRINT(LOOP_1): QUIT;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.01 seconds
memory 5773.37k
OS Memory 27300.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 149 Switch Count 4
Page Faults 0
Page Reclaims 68
Page Swaps 0
Voluntary Context Switches 78
Involuntary Context Switches 0
Block Input Operations 304
Block Output Operations 0
MPRINT(LOOP_1): PROC SQL;
MPRINT(LOOP_1): SELECT MIN(CHAVE) INTO :I FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0));
MPRINT(LOOP_1): QUIT;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.01 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5660.65k
OS Memory 27300.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 150 Switch Count 4
Page Faults 0
Page Reclaims 58
Page Swaps 0
Voluntary Context Switches 84
Involuntary Context Switches 0
Block Input Operations 288
Block Output Operations 0
MPRINT(LOOP_1): PROC SQL;
MPRINT(LOOP_1): CREATE TABLE REDUZ_01 AS SELECT * FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE_FIM = 0));
NOTE: Compressing data set WORK.REDUZ_01 decreased size by 99.78 percent.
Compressed is 1 pages; un-compressed would require 453 pages.
NOTE: Table WORK.REDUZ_01 created, with 453 rows and 7 columns.
MPRINT(LOOP_1): QUIT;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.02 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5774.37k
OS Memory 27300.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 151 Switch Count 5
Page Faults 0
Page Reclaims 84
Page Swaps 0
4 The SAS System Wednesday, January 27, 2021 09:11:00 AM
Voluntary Context Switches 92
Involuntary Context Switches 0
Block Input Operations 288
Block Output Operations 264
MPRINT(LOOP_1): DATA SCX.CAMINHO_FORTE_AUX_01_BACK;
MPRINT(LOOP_1): SET SCX.CAMINHO_FORTE_AUX_01;
MPRINT(LOOP_1): IF CHAVE_FIM > 0;
MPRINT(LOOP_1): RUN;
NOTE: There were 453 observations read from the data set SCX.CAMINHO_FORTE_AUX_01.
NOTE: The data set SCX.CAMINHO_FORTE_AUX_01_BACK has 0 observations and 7 variables.
NOTE: DATA statement used (Total process time):
real time 0.08 seconds
user cpu time 0.00 seconds
system cpu time 0.01 seconds
memory 1356.43k
OS Memory 22436.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 152 Switch Count 4
Page Faults 0
Page Reclaims 110
Page Swaps 0
Voluntary Context Switches 365
Involuntary Context Switches 7
Block Input Operations 320
Block Output Operations 264
MPRINT(LOOP_1): DATA REDUZ_01;
MPRINT(LOOP_1): SET SCX.CAMINHO_FORTE_AUX_01;
MPRINT(LOOP_1): IF CHAVE_FIM = 0;
MPRINT(LOOP_1): RUN;
NOTE: There were 453 observations read from the data set SCX.CAMINHO_FORTE_AUX_01.
NOTE: The data set WORK.REDUZ_01 has 453 observations and 7 variables.
NOTE: Compressing data set WORK.REDUZ_01 decreased size by 99.78 percent.
Compressed is 1 pages; un-compressed would require 453 pages.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
user cpu time 0.02 seconds
system cpu time 0.00 seconds
memory 1121.37k
OS Memory 22436.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 153 Switch Count 5
Page Faults 0
Page Reclaims 80
Page Swaps 0
Voluntary Context Switches 78
Involuntary Context Switches 22
Block Input Operations 288
Block Output Operations 264
MPRINT(LOOP_2): PROC SQL;
MPRINT(LOOP_2): SELECT LCF, LCF_01, LCF_02, LCF_03, UEV INTO :LCF, :LCF_01, :LCF_02, :LCF_03, :UEV FROM CAMINHO_FORTE_AUX_02
5 The SAS System Wednesday, January 27, 2021 09:11:00 AM
WHERE CHAVE=1;
MPRINT(LOOP_2): QUIT;
NOTE: PROCEDURE SQL used (Total process time):
real time 0.00 seconds
user cpu time 0.01 seconds
system cpu time 0.00 seconds
memory 5989.96k
OS Memory 27300.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 154 Switch Count 0
Page Faults 0
Page Reclaims 161
Page Swaps 0
Voluntary Context Switches 0
Involuntary Context Switches 1
Block Input Operations 0
Block Output Operations 0
MPRINT(LOOP_2): PROC SQL;
NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks.
MPRINT(LOOP_2): CREATE TABLE REDUZ_02 AS SELECT * FROM REDUZ_01 WHERE CAMINHO_FORTE_AUX LIKE '' AND CAMINHO_FORTE_AUX LIKE '' AND
CAMINHO_FORTE_AUX LIKE '' AND CAMINHO_FORTE_AUX LIKE
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
&I.>=&ATE.
ERROR: The condition in the %DO %UNTIL loop, &I.>=&ATE., yielded an invalid or missing value, . The macro will stop executing.
ERROR: The macro LOOP_1 will stop executing.
116
117 %LET _CLIENTTASKLABEL=;
118 %LET _CLIENTPROCESSFLOWNAME=;
119 %LET _CLIENTPROJECTPATH=;
120 %LET _CLIENTPROJECTPATHHOST=;
121 %LET _CLIENTPROJECTNAME=;
122 %LET _SASPROGRAMFILE=;
123 %LET _SASPROGRAMFILEHOST=;
124
125 ;*';
MPRINT(LOOP_2): '%
; QUIT; PROC SQL; CREATE TABLE CHAVE_AUX
AS SELECT CHAVE FROM REDUZ_02 WHERE CAMINHO_FORTE_AUX LIKE &LCF.; QUIT; PROC SQL; CREATE TABLE CAMINHO_FORTE_AUX_01 AS
SELECT *, CASE WHEN TT_EVENTOS_CLIENTE_CF = 1 THEN CHAVE WHEN CHAVE IN (SELECT * FROM CHAVE_AUX) AND CHAVE_FIM = 0 THEN
&I. END AS AUX FROM SCX.CAMINHO_FORTE_AUX_01 A; QUIT; DATA SCX.CAMINHO_FORTE_AUX_01 (DROP=AUX); SET CAMINHO_FORTE_AUX_01; IF
AUX = &I. AND CHAVE_FIM = 0 THEN CHAVE_FIM = AUX; RUN;; PROC SQL; SELECT CASE WHEN MIN(CHAVE) IS NULL THEN &ATE. ELSE
MIN(CHAVE) END INTO :I FROM SCX.CAMINHO_FORTE_AUX_01 (WHERE=(CHAVE > 1 AND CHAVE_FIM = 0)); QUIT;;%LET _CLIENTTASKLABEL=;%LET
_CLIENTPROCESSFLOWNAME=;%LET _CLIENTPROJECTPATH=;%LET _CLIENTPROJECTPATHHOST=;%LET _CLIENTPROJECTNAME=;%LET _SASPROGRAMFILE=;%LET
_SASPROGRAMFILEHOST=;;*'
NOTE: Table WORK.REDUZ_02 created, with 0 rows and 7 columns.
125 ! *";*/;quit;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
real time 0.00 seconds
user cpu time 0.00 seconds
system cpu time 0.00 seconds
memory 5627.12k
OS Memory 27812.00k
Timestamp 01/27/2021 10:58:04 AM
Step Count 155 Switch Count 26 The SAS System Wednesday, January 27, 2021 09:11:00 AM
Page Faults 0
Page Reclaims 122
Page Swaps 0
Voluntary Context Switches 14
Involuntary Context Switches 1
Block Input Operations 0
Block Output Operations 264
125 ! run;
126 ODS _ALL_ CLOSE;
127
128
129 QUIT; RUN;
130
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
&I.>=&ATE.
Please add a command just before the %DO WHILE that prints out the values of the macro variable &i and the macro variable &ate and see what they are. Obviously, one or both of them make doing the comparison impossible.
I printed the step by step of the macro as you suggested and I found the error. The 1st rows was wrong already, it was empty. So I fixed the code from this:
38 PROC SQL;
39 SELECT MIN(CHAVE)
40 INTO :I
41 FROM SCX.CAMINHO_FORTE_AUX_01to this:
38 PROC SQL;
39 SELECT MIN(CHAVE)+1
40 INTO :I
41 FROM SCX.CAMINHO_FORTE_AUX_01Now I'm back to business, thanks for yor help @PaigeMiller
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.