Headsup ! I am a beginner in sas. Appreciate your time, kindness and help! I have a master dataset and three sub datasets ,with various columns puled from Oracle database. The code works till I pull the data, merge. I run this everyday, the output is an excel file with acct_num, acct_id and other columns. the logic looks back last 7 days and fetches the result. Now, the tricky part is I am comparing the today's file to last 7 days and remove duplicates from today's report.( My previous post was to seek help on defining &yesterday, and with the help I created &previous_day 1 to 7 , stacked) After the comparison runs and when I pull the final data, I have this datatype error that seems to be difficult to resolve. I used APPEND, APPEND with FORCE, I also tried creating TEST dataset so my first previous_day1 report will look at test and avoid any data type error IF the previous report has ANY NULL data. 253 data myora.final_result2; 254 /*format open_dt 10. close_dt 10. merch_num 12. DOB $10.;*/ 255 merge myora.final_result (in=a) Previous_report1(in=b) Previous_report2 (in=c) 255! Previous_report3 (in=d) Previous_report4 (in=e) Previous_report5 (in=f) Previous_report6 255! (in=g) Previous_report7(in=h); ERROR: Variable OPEN_DT has been defined as both character and numeric. ERROR: Variable CLOSE_DT has been defined as both character and numeric. ERROR: Variable MERCH_NUM has been defined as both character and numeric. ERROR: Variable DOB has been defined as both character and numeric. ERROR: Variable ACCT_NUM has been defined as both character and numeric %let current_day = %sysfunc(today()); %let weekday = %sysfunc(weekday(¤t_day.)); %if &weekday. = 2 %then %do; /* If it's Monday, fetch friday */ %let previous_day = %sysfunc(intnx(day, ¤t_day., -3), date9.); %let previous_day2 = %sysfunc(intnx(day, ¤t_day., -4), date9.); %let previous_day3 = %sysfunc(intnx(day, ¤t_day., -5), date9.); %let previous_day4 = %sysfunc(intnx(day, ¤t_day., -6), date9.); %let previous_day5 = %sysfunc(intnx(day, ¤t_day., -7), date9.); %let previous_day6 = %sysfunc(intnx(day, ¤t_day., -8), date9.); %let previous_day7 = %sysfunc(intnx(day, ¤t_day., -9), date9.); %end; %else %do; /* For the rest of the week, refer to yesterday */ %let previous_day = %sysfunc(intnx(day, ¤t_day., -1), date9.); %let previous_day2 = %sysfunc(intnx(day, ¤t_day., -2), date9.); %let previous_day3 = %sysfunc(intnx(day, ¤t_day., -3), date9.); %let previous_day4 = %sysfunc(intnx(day, ¤t_day., -4), date9.); %let previous_day5 = %sysfunc(intnx(day, ¤t_day., -5), date9.); %let previous_day6 = %sysfunc(intnx(day, ¤t_day., -6), date9.); %let previous_day7 = %sysfunc(intnx(day, ¤t_day., -7), date9.); %end; %put &previous_day.; PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day..xlsx" OUT = Previous_report1 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; /*proc print data = Previous_report1;run;*/ PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day2..xlsx" OUT = Previous_report2 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; /*proc print data = Previous_report2;run;*/ PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day3..xlsx" OUT = Previous_report3 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day4..xlsx" OUT = Previous_report4 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day5..xlsx" OUT = Previous_report5 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day6..xlsx" OUT = Previous_report6 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; PROC IMPORT DATAFILE = "filepath\Output\filename&previous_day7..xlsx" OUT = Previous_report7 DBMS = EXCEL REPLACE; RANGE = 'possible_accts$'; MIXED = YES; SCANTEXT = YES; USEDATE = YES; SCANTIME = YES; RUN; proc delete data=test;run; data test; /* Define variable lengths */ format acct_num 16. acct_id 8. tran_dt 12. open_dt $10. close_dt 10. cheque_pymt 30. merch_num 12. postal_cd $6. count_cash_adv 4. total_cash_adv 9. name $15. DOB $10. email $24. tel_home 10. addr_ln1 $17.; run; rsubmit; proc upload data=test; run; proc sort data=test; by acct_id; run; proc upload data=Previous_report1 ; run; proc sort data=Previous_report1; by acct_id; run; proc upload data=Previous_report2 ; run; proc sort data=Previous_report2; by acct_id; run; proc upload data=Previous_report3 ; run; proc sort data=Previous_report3; by acct_id; run; proc upload data=Previous_report4 ; run; proc sort data=Previous_report4; by acct_id; run;proc upload data=Previous_report5 ; run; proc sort data=Previous_report5; by acct_id; run; proc upload data=Previous_report6 ; run; proc sort data=Previous_report6; by acct_id; run; proc upload data=Previous_report7 ; run; proc sort data=Previous_report7; by acct_id; run; endrsubmit; proc append base=test data=Previous_report1 FORCE;run; /* try to run it without FORCE and then with force */ proc append base=test data=Previous_report2 FORCE;run; proc append base=test data=Previous_report3 FORCE;run; proc append base=test data=Previous_report4 FORCE;run; proc append base=test data=Previous_report5 FORCE;run; proc append base=test data=Previous_report6 FORCE;run; proc append base=test data=Previous_report7 FORCE;run; rsubmit; proc delete data= myora.final_result2;run; data myora.final_result2; merge myora.final_result (in=a) Previous_report1(in=b) Previous_report2 (in=c) Previous_report3 (in=d) Previous_report4 (in=e) Previous_report5 (in=f) Previous_report6 (in=g) Previous_report7(in=h); by acct_id ; if a and not b and not c and not d and not e and not f and not g and not h; run; endrsubmit; rsubmit; /*table for result */ proc sql; connect to oracle(&ora_str.); create table final as select * from connection to oracle( select ACCT_NUM,ACCT_ID, CHEQUE_PYMT,NAME, DOB, EMAIL, TEL_HOME, ADDR_LN1 from final_result2 where CHEQUE_PYMT >= '1000.00' ); disconnect from oracle; quit; endrsubmit; rsubmit; proc download data=final; run; endrsubmit;
... View more