BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ynchoir
Fluorite | Level 6

Hi,

This is the first time I write a code with macro and I get stucked with seemingly very easy step.

%macro readdata(yrmo=);

data &yrmo;

          infile 'C:\Users\XXX\&yrmo';

          input cusip          $ 1-8 name $ 9-40 date          issue_date          maturity_date          trader_matrix $ flat_prc acc_int coupon          yield

duration amount_out          Moody_rat SP_rat callability $ call_prc putability $ put_prc ret ind_code

Fitch_rat index_flag convexity Duff_Phelps;

run;

%mend;

%readdata(yrmo = Y0173);

This code gives me an error message.

ERROR: Physical file does not exist, C:\XXX\&yrmo.

OK, the file actually exists and if I replace &yrmo with Y0173, the code works fine.

How should I get &yrmo automatically replaced by macro?

Any advice will be appreciated.  Thank you!

Yosh

1 ACCEPTED SOLUTION

Accepted Solutions
art297
Opal | Level 21

The file name in your infile statement has to be surrounded by double not single quotes.  Otherwise, the macro variable won't resolve.

View solution in original post

3 REPLIES 3
art297
Opal | Level 21

The file name in your infile statement has to be surrounded by double not single quotes.  Otherwise, the macro variable won't resolve.

tobyfarms
Fluorite | Level 6

@art297Does the same work accessing/importing a URL?  I want to import a table from a url that has dynamic characters.

 

The code I have below is not working.

 

 

%let var1=2017;

%let var2='NC'; %let var9='Cary'; /

 

filename myfile url "http://aa.usno.navy.mil/cgi-bin/aa_rstablew.pl?ID=AA&year=&var1&task=0&state=&var2&place=&var9" lrecl=32767;

 

here is the original url.

filename myfile url "http://aa.usno.navy.mil/cgi-bin/aa_rstablew.pl?ID=AA&year=2017&task=0&state=NC&place=Cary" lrecl=32767;

 

nehalsanghvi
Pyrite | Level 9
Single quotes are not needed when assigning values to macro variables unless you want them as part of your string, which in your case I don't think you do. Try:
%let var2=NC; %let var9=Cary;

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 16429 views
  • 0 likes
  • 4 in conversation