May I know what happened to code 1? I can import perfectly with code 2. May I know how to make code 1 works? Thanks.
%LET YYYYMM=201710;
/**Code 1**/
%macro checkds(dsn);
%if %sysfunc(exist(&dsn)) %then %do;
PROC IMPORT OUT=sales
DATAFILE=&dsn
DBMS=EXCEL REPLACE;
getnames=yes;
run;
%end;
%else %do;
DATA sales;
ID='';
AMOUNT=0;
RUN;
%end;
%mend checkds;
%checkds("d:\test\book1_&YYYYMM..xlsx")
/**code 2**/
PROC IMPORT OUT=SALES
DATAFILE="d:\test\book1_&yyyymm..xlsx"
DBMS=EXCEL REPLACE;
getnames=yes;
run;
As you can see from the macro call, Code #1 expects to receive a quoted path to a file. The macro checks to see whether that file actually exists. If it does, it imports the file into a SAS data set named SALES. If the file doesn't exist, the macro creates a SAS data set named SALES, holding just one observation where ID is blank and AMOUNT is 0.
exist() is a function that checks for the existence of a SAS dataset, so it needs an argument that describes such (LIBNAME.DATASET). Since you want to check for an external (non-SAS) file, you need to use the fexist() function.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.