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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.