Hi Everyone,
So I want to import both file 201711 and 201710.
I use the macro &month=11.
I want to do something like &year.&month-1 to make it 201710.
Can you help me with it?
(clearly, I can create a new macro variable, %let &month_1=10)
Thank you,
HHC
%let year=2017;
%let month=11;
data rate ;
infile "&path\Rate for &year.&month..csv"
dlm=',' dsd truncover firstobs=2;
input ....
You can use the %EVAL() macro function to do integer arithmetic.
%let year=2017;
%let month=11;
%let previous=%eval(&month-1);
But what do you do when month=01?
Use the INTNX() function instead. First convert YEAR and MONTH into an actual date value. Then you can calculate the previous month.
%let year=2017;
%let month=11;
%let this_month=%sysfunc(mdy(&month,1,&year));
%let previous_month=%sysfunc(intnx(month,&this_month,-1));
You can then use the YYMMN6. format to convert it into the string you need for your filename.
"&path\Rate for %sysfunc(putn(&previous_month,yymmn6)).csv"
You can use the %EVAL() macro function to do integer arithmetic.
%let year=2017;
%let month=11;
%let previous=%eval(&month-1);
But what do you do when month=01?
Use the INTNX() function instead. First convert YEAR and MONTH into an actual date value. Then you can calculate the previous month.
%let year=2017;
%let month=11;
%let this_month=%sysfunc(mdy(&month,1,&year));
%let previous_month=%sysfunc(intnx(month,&this_month,-1));
You can then use the YYMMN6. format to convert it into the string you need for your filename.
"&path\Rate for %sysfunc(putn(&previous_month,yymmn6)).csv"
Oh Tom,
You are right, I haven't thought bout Jan 🙂
Thanks a lot.
HC
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.