Hi.. I am trying to come up with a SAS code that can identify all letter values among all variables. For example, I have a dataset that have 3 CHAR variables (var1 - var3):
var1 var2 var3
01 10 M9
02 3M 00
N 09
07 18 11
How can I just extract all the letter values (values that have letter in them)?
var1 var2 var3
N 3M M9
or, even better, how I can have output like this?
special_value
N
3M
M9
data have;
input (var1 var2 var3) ($);
cards;
01 10 M9
02 3M 00
N . 09
07 18 11
;
data want;
set have;
array t var1-var3;
do i=1 to dim(t);
if anyalpha(t(i)) then
do;
want=t(i);
output;
end;
end;
keep want;
run;
Thanks for the quick reply!
If I have 100+ variables there, can I do this?
%let varlist = %str(var1 ... var1000); (?)
data want;
set have;
array t &varlist.;
do i=1 to dim(t);
if anyalpha(t(i)) then
do;
want=t(i);
output;
end;
end;
keep want;
run;
Sure.
I wonder why you need to quote though with %str
I believe just
%let arraylist=var1 var2 var3 varN;
should work fine
Macro quoting is not needed in this instance.
Thank you! Let me try this! 😃
Alternatively with regular expressions
data want(where=(newvars ne ''));
set have;
array vars(*) $ var1 var2 var3;
do i = 1 to dim(vars);
newvars=ifc(prxmatch('m/[A-Z]/',strip(vars(i))),strip(vars(i)),'') ;
output;
end;
run;
Thanks! 😃
Sure.. how can I do that?
Let's build on your earlier program:
%let varlist = var1 ... var1000;
data want;
set have;
array t &varlist.;
do i=1 to dim(t);
if anyalpha(t{i}) then do;
want=t{i};
recno = _n_;
varname = vname(t{i}) ;
output;
end;
end;
keep want recno varname;
run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.