Ok, I have a lot variables and I need to delete more then half of them.
Unfortunately, very few are sequential (ie X1-X10) very few are grouped together (211=varnum(dataset,varnameA), 212=varnum(dataset,varnameB,... 236=varnum(dataset,varnameZ)) and then there are just a bunch all over the place.
I wrote a little macro (see end of post) that works for the cases where the variables are grouped so when I have a few separate clusters a can delete them pretty easily. Of course it can also keep lists of variables just as easily.
I'm hoping to make some changes so I can delete the variables all over the place easily.
The current macro is:
%macro VarList(DATASET,SEP,i=,n=);
proc sql;
create table VarListVars as
select varnum, name
from dictionary.columns
where memname = &DATASET.;
quit;
/* maybe this can be done inside the proc sql also*/
data VarListTemp;
set VarListVars(firstobs=&i obs=&n);
run;
%global VarList;
proc sql noprint;
select name into :VarList separated by &SEP
from VarListTemp;
quit;
/*EDIT:I guess I should add something to delete my temp datasets but I'm not too worried about that at this point*/
%mend VarList;
%VarList('dataset',' ',i=211,n=236);
Then I use
data datasetB;
set dataset;
drop/keep/(if with sep='=0 | ')/whatever &VarList;
run;
I'd like to be able to use a vector of varnums. Like change the macro to accept v={1,10,38...,all integers from 211 to 236,... 525 to 538,...} instead of i,n
Thanks
Message was edited by: MichaelD
... View more