Good day.
Am encounting the above error message
any idea on how to solve this
below is my script.
DATA WRK.FINAL_OD_LIMIT_1 (ENCODING=ANY);
MERGE FIN.TO_MVP1_CLIENT (IN=A)
EIW_BI.BI_ACCOUNT (IN=B)
LMT.Final_pdg2 (IN=C)
EIW_BI.BI_PRODUCT (IN=D);
BY BP_ID;
IF A AND B AND C AND D
AND B.PRODUCT = D.PRODUCT_ID
AND A.BP_ID = B.CUSTOMER_NUM
AND A.BP_ID = C.FE_GEN_CUST_NO
AND B.PRODUCT IN (0141,4478,0144,0060,0161,1337,9285,4305,1825,0006,4356)
AND TAKE_UP_DATE_WA BETWEEN 20230510 AND &YDAY
AND BA_CHQ_LIMIT_DIFF_CD_PD ne . /* Use 'ne' for not equal to */
AND BA_CHQ_LIMIT_DIFF_CD_PD ne 0
AND DA_Decision = 'Approved';
BASE = C.CPM_CHQ_AMNT_CURR_LIM_1;
NEW_LIMIT = C.BA_OD_LIMIT_CD;
OFFER_LIMIT_FINAL = C.OFFER_LIMIT_FINAL;
DIFF = C.BA_CHQ_LIMIT_DIFF_CD_PD;
Product_Type = C.Product_Type;
Province = C.Province;
Centre = C.Centre;
AE_Name = C.AE_Name;
TAKE_UP_DATE_DT = CATS(SUBSTR(PUT(TAKE_UP_DATE_WA, 8.), 1, 4), '-',
SUBSTR(PUT(TAKE_UP_DATE_WA, 12.), 1, 2), '-',
SUBSTR(PUT(TAKE_UP_DATE_WA, 14.), 1, 2));
FORMAT TAKE_UP_DATE_DT DATE9.;
PRODUCT_NAME = D.PRODUCT_NAME;
DROP TAKE_UP_DATE_WA PRODUCT_ID CUSTOMER_NUM FE_GEN_CUST_NO;
RUN;
The SAS System Friday, February 9, 2024 05:54:00 PM
1 ;*';*";*/;quit;run;
2 OPTIONS PAGENO=MIN;
3 %LET _CLIENTTASKLABEL='Program 1';
4 %LET _CLIENTPROCESSFLOWNAME='Standalone Not In Project';
5 %LET _CLIENTPROJECTPATH='';
6 %LET _CLIENTPROJECTPATHHOST='';
7 %LET _CLIENTPROJECTNAME='';
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 DATA WRK.FINAL_OD_LIMIT_1 (ENCODING=ANY);
29 MERGE FIN.TO_MVP1_CLIENT (IN=A)
30 EIW_BI.BI_ACCOUNT (IN=B)
31 LMT.Final_pdg2 (IN=C)
32 EIW_BI.BI_PRODUCT (IN=D);
NOTE: Data file LMT.FINAL_PDG2.DATA is in a format that is native to another host, or the file encoding does not match the session
encoding. Cross Environment Data Access will be used, which might require additional CPU resources and might reduce
performance.
33 BY BP_ID;
34 IF A AND B AND C AND D
35 AND B.PRODUCT = D.PRODUCT_ID
_________
557
ERROR: DATA STEP Component Object failure. Aborted during the COMPILATION phase.
ERROR 557-185: Variable B is not an object.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: MVA_DSIO.OPEN_CLOSE| _DISARM| STOP| _DISARM| 2024-02-09T20:08:29,259+02:00| _DISARM| WorkspaceServer| _DISARM| SAS|
_DISARM| | _DISARM| 2334| _DISARM| 27422720| _DISARM| 12| _DISARM| 31| _DISARM| 0| _DISARM| 232345680| _DISARM| 0.010000|
_DISARM| 0.299220| _DISARM| 2023121308.960172| _DISARM| 2023121309.259392| _DISARM| 0.010000| _DISARM| | _ENDDISARM
NOTE: MVA_DSIO.OPEN_CLOSE| _DISARM| STOP| _DISARM| 2024-02-09T20:08:29,273+02:00| _DISARM| WorkspaceServer| _DISARM| SAS|
_DISARM| | _DISARM| -1| _DISARM| 27422720| _DISARM| 12| _DISARM| 31| _DISARM| 0| _DISARM| 232345680| _DISARM| 0.010000|
_DISARM| 0.181015| _DISARM| 2023121309.092299| _DISARM| 2023121309.273314| _DISARM| 0.010000| _DISARM| | _ENDDISARM
NOTE: MVA_DSIO.OPEN_CLOSE| _DISARM| STOP| _DISARM| 2024-02-09T20:08:29,273+02:00| _DISARM| WorkspaceServer| _DISARM| SAS|
_DISARM| | _DISARM| 236804| _DISARM| 27422720| _DISARM| 12| _DISARM| 31| _DISARM| 0| _DISARM| 232345680| _DISARM| 0.010000|
_DISARM| 0.178877| _DISARM| 2023121309.094858| _DISARM| 2023121309.273735| _DISARM| 0.010000| _DISARM| | _ENDDISARM
NOTE: MVA_DSIO.OPEN_CLOSE| _DISARM| STOP| _DISARM| 2024-02-09T20:08:29,288+02:00| _DISARM| WorkspaceServer| _DISARM| SAS|
_DISARM| | _DISARM| -1| _DISARM| 27422720| _DISARM| 12| _DISARM| 31| _DISARM| 0| _DISARM| 232345680| _DISARM| 0.010000|
2 The SAS System Friday, February 9, 2024 05:54:00 PM
_DISARM| 0.030627| _DISARM| 2023121309.257582| _DISARM| 2023121309.288209| _DISARM| 0.010000| _DISARM| | _ENDDISARM
NOTE: PROCEDURE| _DISARM| STOP| _DISARM| 2024-02-09T20:08:29,288+02:00| _DISARM| WorkspaceServer| _DISARM| SAS| _DISARM| |
_DISARM| 1148223488| _DISARM| 27422720| _DISARM| 12| _DISARM| 31| _DISARM| 0| _DISARM| 232345680| _DISARM| 0.020000| _DISARM|
0.330023| _DISARM| 2023121308.958401| _DISARM| 2023121309.288424| _DISARM| 0.020000| _DISARM| | _ENDDISARM
NOTE: DATA statement used (Total process time):
real time 0.32 seconds
user cpu time 0.02 seconds
system cpu time 0.00 seconds
memory 1847.31k
OS Memory 26780.00k
Timestamp 02/09/2024 08:08:29 PM
Step Count 87 Switch Count 0
Page Faults 0
Page Reclaims 51
Page Swaps 0
Voluntary Context Switches 19
Involuntary Context Switches 0
Block Input Operations 0
Block Output Operations 0
36 AND A.BP_ID = B.CUSTOMER_NUM
37 AND A.BP_ID = C.FE_GEN_CUST_NO
38 AND B.PRODUCT IN (0141,4478,0144,0060,0161,1337,9285,4305,1825,0006,4356)
39 AND TAKE_UP_DATE_WA BETWEEN 20230510 AND &YDAY
40 AND BA_CHQ_LIMIT_DIFF_CD_PD ne . /* Use 'ne' for not equal to */
41 AND BA_CHQ_LIMIT_DIFF_CD_PD ne 0
42 AND DA_Decision = 'Approved';
43 BASE = C.CPM_CHQ_AMNT_CURR_LIM_1;
44 NEW_LIMIT = C.BA_OD_LIMIT_CD;
45 OFFER_LIMIT_FINAL = C.OFFER_LIMIT_FINAL;
46 DIFF = C.BA_CHQ_LIMIT_DIFF_CD_PD;
47 Product_Type = C.Product_Type;
48 Province = C.Province;
49 Centre = C.Centre;
50 AE_Name = C.AE_Name;
51 TAKE_UP_DATE_DT = CATS(SUBSTR(PUT(TAKE_UP_DATE_WA, 8.), 1, 4), '-',
52 SUBSTR(PUT(TAKE_UP_DATE_WA, 12.), 1, 2), '-',
53 SUBSTR(PUT(TAKE_UP_DATE_WA, 14.), 1, 2));
54 FORMAT TAKE_UP_DATE_DT DATE9.;
55 PRODUCT_NAME = D.PRODUCT_NAME;
56 DROP TAKE_UP_DATE_WA PRODUCT_ID CUSTOMER_NUM FE_GEN_CUST_NO;
57 RUN;
58
59
60 %LET _CLIENTTASKLABEL=;
61 %LET _CLIENTPROCESSFLOWNAME=;
62 %LET _CLIENTPROJECTPATH=;
63 %LET _CLIENTPROJECTPATHHOST=;
64 %LET _CLIENTPROJECTNAME=;
65 %LET _SASPROGRAMFILE=;
66 %LET _SASPROGRAMFILEHOST=;
67
68 ;*';*";*/;quit;run;
69 ODS _ALL_ CLOSE;
70
71
72 QUIT; RUN;
73
Or easier
'Alfred' <= name <= 'John'
Which will work in either IF or WHERE.
AND B.PRODUCT = D.PRODUCT_ID
This is SQL syntax, which is not valid in a DATA step.
Use this
and product = product_id
Statements like
Product_Type = C.Product_Type;
serve no purpose and have to be removed.
You also seem to have a serious musunderstanding about dates in SAS.
TAKE_UP_DATE_DT = CATS(SUBSTR(PUT(TAKE_UP_DATE_WA, 8.), 1, 4), '-',
SUBSTR(PUT(TAKE_UP_DATE_WA, 12.), 1, 2), '-',
SUBSTR(PUT(TAKE_UP_DATE_WA, 14.), 1, 2));
FORMAT TAKE_UP_DATE_DT DATE9.;
In the first statement, you create the variable as character, but in the second, you try to assign a numeric format to it.
In SAS, date values are numeric and count the days from 1960-01-01. If take_up_date_wa is a SAS date, you do not need to do any conversion. A simple rename will achieve what you seem to want to do.
You also need to review all your conditions involving dates.
I Re ran the code with the following changes as per your advise however am still getting the below error message.
enhance script
DATA WRK.FINAL_OD_LIMIT_1 (ENCODING=ANY);
MERGE FIN.TO_MVP1_CLIENT (IN=A)
EIW_BI.BI_ACCOUNT (IN=B)
LMT.Final_pdg2 (IN=C)
EIW_BI.BI_PRODUCT (IN=D);
BY BP_ID;
IF A AND B AND C AND D
AND PRODUCT = PRODUCT_ID
AND BP_ID = CUSTOMER_NUM
AND BP_ID = FE_GEN_CUST_NO
AND PRODUCT IN (0141,4478,0144,0060,0161,1337,9285,4305,1825,0006,4356)
AND TAKE_UP_DATE_WA BETWEEN '2023-05-10' AND &YDAY
AND BA_CHQ_LIMIT_DIFF_CD_PD ne . /* Use 'ne' for not equal to */
AND BA_CHQ_LIMIT_DIFF_CD_PD = 0
AND DA_Decision = 'Approved';
TAKE_UP_DATE_DT = INPUT(TAKE_UP_DATE_WA, yymmdd10.);
FORMAT TAKE_UP_DATE_DT DATE9.;
PRODUCT_NAME = PRODUCT_NAME; /* Assuming this variable is defined elsewhere */
DROP TAKE_UP_DATE_WA PRODUCT_ID CUSTOMER_NUM FE_GEN_CUST_NO;
RUN;
388
202
ERROR 388-185: Expecting an arithmetic operator.
ERROR 202-322: The option or parameter is not recognized and will be ignored.
The BETWEEN-AND Operator is only valid in WHERE conditions. You can't use it with an IF condition. That's the reason for the syntax error you get.
data test;
set sashelp.class;
if name between 'Alfred' and 'John';
run;
Below two options are valid syntax for the selection you want.
/* option 1 */
data test;
set sashelp.class;
if name>='Alfred' and name<='John';
run;
/* option 2 */
data test;
set sashelp.class;
where name between 'Alfred' and 'John';
run;
Or easier
'Alfred' <= name <= 'John'
Which will work in either IF or WHERE.
Looks like a very strange thing to do.
Do you really have only one observation per BP_ID in each of those input datasets?
If you want to match on PRODUCT_ID why is it not included in the BY statement?
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
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.