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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.