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;

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 17065 views
  • 0 likes
  • 4 in conversation