I want to delete some data sets from a common library which have neither the same prefix nor suffix, but which share a common naming convention. Specifically, I have a number of datasets which look like *_name_* where "_name_" is some description that is common to all the data sets and * is a wildcard character.
I am aware of the fact that if my data had a common prefix, e.g. name_*, then I could delete all of the data sets with proc data sets and the colon operator like so
proc datasets library=library nolist; delete name_:; run;
I guess what I am looking for is an analogous solution for my situation, for example
proc datasets library=library nolist; delete :_name_:; run;
Unfortunately, the latter does not seem to work.
You could use PROC SQL to create a macro variable with the data set names of interest
proc sql noprint;
     select memname into :dsnames separated by ' ' from dictionary.tables
     where find(upcase(memname),'_NAME_')>0 and libname='WORK';
quit;
					
				
			
			
				Retrieve the list of dataset names first to macro variable:
proc sql noprint;
select catx(".",libname,memname) into :datasets separated by " "
from dictionary.tables
where libname = "LIBRARY" and index(memname,"_NAME_");
quit;
proc delete data=&datasets.;
run;
					
				
			
			
				
			
			
			
			
			
			
			
		Many thanks, this nearly worked for me, but then I get the following error:
Error: sqxexpr: opcode 342 not implemented
I think caused by the index() portion...anyway, could just be my sas implementation. The core idea certainly works, however.
Hmm.
Just ran this on On Demand, successfully:
proc sql noprint;
select catx(".",libname, memname) into :datasets separated by " "
from dictionary.tables
where libname = "SASHELP" and index(memname,"BU");
quit;
%put &datasets;
Log:
 69         proc sql noprint;
 70         select catx(".",libname, memname) into :datasets separated by " "
 71         from dictionary.tables
 72         where libname = "SASHELP" and index(memname,"BU");
 73         quit;
 NOTE:  Verwendet wurde: PROZEDUR SQL - (Gesamtverarbeitungszeit):
       real time           0.01 seconds
       user cpu time       0.01 seconds
       system cpu time     0.01 seconds
       memory              5796.46k
       OS Memory           29860.00k
       Timestamp           29.09.2021 12:25:16 nachm.
       Step Count                        24  Switch Count  0
       Page Faults                       0
       Page Reclaims                     443
       Page Swaps                        0
       Voluntary Context Switches        0
       Involuntary Context Switches      0
       Block Input Operations            0
       Block Output Operations           0
       
 
 74         
 75         %put &datasets;
 SASHELP.BURROWS SASHELP.BUY SASHELP.VCNTABU
					
				
			
			
				
			
			
			
			
			
			
			
		Yes, unfortunately, that doesn't seem to work for me. I'm not sure how to increase the verbosity of the logging unfortunately, so there is not much in the log beyond the error.
1426 proc sql noprint;
1427 select catx(".",libname, memname) into :datasets separated by " "
1428 from dictionary.tables
1429 where libname = "SASHELP" and index(memname,"BU");
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
Error: sqxexpr: opcode 342 not implemented.
NOTE: No rows were selected.
1430 quit;
@Billy_Pilgrim wrote:
Many thanks, this nearly worked for me, but then I get the following error:
Error: sqxexpr: opcode 342 not implemented
I think caused by the index() portion...anyway, could just be my sas implementation. The core idea certainly works, however.
Providing ERROR messages without showing us the rest of the LOG does not help. Please show us the entire LOG for your code.
You could use PROC SQL to create a macro variable with the data set names of interest
proc sql noprint;
     select memname into :dsnames separated by ' ' from dictionary.tables
     where find(upcase(memname),'_NAME_')>0 and libname='WORK';
quit;
					
				
			
			
				It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.