У меня есть инструкция proc sql в макрос-функции, которая выбирает имена столбцов из dictionary.columns
.Я хотел бы исключить имена столбцов на основе нескольких строковых шаблонов, которым переданы аргументы - см. Ниже
%symdel keepnames;
%macro test(data=, col=);
%global keepnames;
%let data_lib = %sysfunc(upcase(%sysfunc(scan("&data", 1, "."))));
%let data_data = %sysfunc(upcase(%sysfunc(scan("&data", 2, "."))));
%put &data_lib;
%put &data_data;
proc sql noprint;
select name into :keepnames separated by " "
from dictionary.columns
where libname = "&data_lib" and
memname = "&data_data" and
upcase(name) not like upcase("&col.");
quit;
%mend test;
%test(data=sashelp.cars, col=mpg w)
%put &keepnames;
В идеале аргумент col
должен превращаться в %mpg%, %w%
, что исключает любые имена столбцов с mpg илиw в их имени.
Есть пара проблем, с которыми я сталкиваюсь.Во-первых, я не могу понять, как скрыть %
от макропроцессора.Я пытался использовать %str()
несколькими способами, но безуспешно.Во-вторых, я не могу легко добавить символы %
вокруг слов в аргументе col
.Любая помощь приветствуется!