Hi all,
How can I drop lowercase variable? For example,
original variable set:
CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE
target variable set:
CHF VALVVE PULMCIRC OBESE
Best,
JackLiang
Or if the variables you want to drop always start with a lowercase o then here a coding variant to @novinosrin
data have;
length CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 8;
stop;
run;
proc sql noprint;
select name into :drop separated by ' '
from dictionary.columns
where libname='WORK' and memname='HAVE' and name like 'o%'
;
quit;
data want;
set have;
drop &drop;
run;
Or this way in case your table is in a data base or/and you want to conserve indices and the like
data have;
length CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 8;
stop;
run;
%let drop=;
proc sql noprint feedback;
select name into :drop separated by ','
from dictionary.columns
where libname='WORK' and memname='HAVE' and name like 'o%'
;
alter table have
drop &drop
;
quit;
You may prefer use KEEP instead DROP.
Like this?
data HAVE;
retain CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 1;
run;
proc contents data=HAVE noprint out=CONT;
run;
data _null_;
set CONT end=LASTOBS;
if _N_ = 1 then call execute('data WANT; set HAVE; drop ');
if prxmatch('/[a-z]/',NAME) then call execute(NAME);
if LASTOBS then call execute(';run;');
run;
data have;
length CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 8;
run;
proc contents data=HAVE noprint out=_have;
quit;
proc sql;
select name into :drop separated by ' '
from _have
where anylower(name)>0;
QUIT;
data want;
set have;
drop &drop;
run;
Or if the variables you want to drop always start with a lowercase o then here a coding variant to @novinosrin
data have;
length CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 8;
stop;
run;
proc sql noprint;
select name into :drop separated by ' '
from dictionary.columns
where libname='WORK' and memname='HAVE' and name like 'o%'
;
quit;
data want;
set have;
drop &drop;
run;
Or this way in case your table is in a data base or/and you want to conserve indices and the like
data have;
length CHF VALVVE PULMCIRC OBESE oCHF oVALVVE oPULMCIRC oOBESE 8;
stop;
run;
%let drop=;
proc sql noprint feedback;
select name into :drop separated by ','
from dictionary.columns
where libname='WORK' and memname='HAVE' and name like 'o%'
;
alter table have
drop &drop
;
quit;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.