Hi,
I need to identify all palindromes within a directory. I use a proc contents and proc sort to identify the datasets within a directory, like so:
proc contentss data = dPath._all_ out = dFiles (keep = memname);
run;
proc sort data = dFiles nodupkey;
by memname;
run; I want to identify palindromes within this directory. As it stands, the macro parameter would take in a string and reverse it. However, I would like to do this for all rows/columns for any dataset. How would I adapt the following logic to work for all columns/rows in a dataset?
%macro palindrome (parameter = ?);
%let string = %sysfunc(reverse(%sysfunc(compress([WHAT TO PUT HERE?],,sp);
%let reverse = %sysfunc(compress([WHAT TO PUT HERE?]);
%if %upcase(&string.) = %upcase(&reverse.) %then %do;
ods output = "/palindrome"
%end;
And who told you that you need to use macro? All that does is generate Base SAS which is the programming language and Base SAS has this functionality:
data want; set have; if strip(reverse(string))=strip(string) then palindrome="Yes"; run;
Thank you for the reply, I plan to use macros because I need to do this for all datasets within a directory. So, instead of the user inputting the string to check if there is a palindrome, I need that to be done dynamically, i.e. identify any palindromes within a dataset.
data _null_;
set sashelp.vcolumn (where=(libname="WORK"));
by memname;
if first.memname then call execute('data '||strip(memname)||'; set '||strip(memname)||';');
call execute('if strip(reverse('||strip(name)||'))=strip('||strip(name)||') then '||strip(name)||'_palindrome="Yes";');
if last.memname then call execute(';run;');
run;
Will do the palindrome check for every variable in every dataset in the work library. If you just want one dataset, then update the the where clause to be:
(where=(libname="WORK" and memname="TMP"))
For example only does TMP in WORK library, upcase is important.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.