Hello,
I have a macro variable something like below and i want to remove the string after the last '\'. and store the output in macro
%let path = D:\input\sas\files\today\chart_data*.sas7bdat;
Expected output is:
D:\input\sas\files\today\
Basically i want to remove all the words after the last '\'. Can someone please help me to get the desired output? Thanks.
%let path = D:\input\sas\files\today\chart_data*.sas7bdat;
%let want=%sysfunc(prxchange(s/[^\\\/]+$//,1,&path));
%put &want;
One easy and lazy way:
%let path = D:\input\sas\files\today\chart_data*.sas7bdat;
data _null_;
k="&path";
call scan(k, -1, position, length,'\');
substr(k,position,length)=' ';
call symputx('path',k);
run;
%put &path;
However, I challenge you to accomplish the same with %syscall with call scan in open code or rxchange
You could double reverse it:
data want; pth=reverse(scan(reverse("&path."),1,"\")); run;
Basically reverse the string, scna off the first block based on \ delimiter, then reverse the result.
%let path = D:\input\sas\files\today\chart_data*.sas7bdat;
%let want=%sysfunc(prxchange(s/[^\\\/]+$//,1,&path));
%put &want;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.
Ready to level-up your skills? Choose your own adventure.