DATA Step, Macro, Functions and more

SAS macro

Reply
Contributor scb
Contributor
Posts: 69

SAS macro

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;

Super User
Posts: 5,509

Re: SAS macro

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.

Super User
Posts: 7,795

Re: SAS macro

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.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Ask a Question
Discussion stats
  • 2 replies
  • 80 views
  • 0 likes
  • 3 in conversation