Что вы пытаетесь сделать, это в основном использовать подход, основанный на данных, для управления вашими макросами. Повезло тебе! Однако вы не можете сделать это прямо так, как вы пытаетесь. Хотя вы можете использовать массив макросов, как упоминает Yukclam9, есть более простой способ.
SAS не использует массивы так, как r
использует векторы или матрицы: SAS использует наборы данных, хотя вы можете делать много одинаковых вещей.
Поместите свои имена файлов в набор данных - возможно, они уже есть в файле excel или что-то еще? Давайте поместим его здесь в datalines, если нет.
data filenames;
input filename :$32.;
datalines;
ce_abcdef_filedetail1
ce_abcdef_filedetail2
ce_abcdef_filedetail3
ce_abcdef_filedetail4
;;;;
run;
Теперь вы хотите получить их в макро-вызов. Сладкий, у нас есть много способов сделать это. Это самое быстрое.
proc sql;
select cats('%analyze_file(FILENAME=',filename,", PATH=&path, OUTPUT=&output)")
into :mcalllist separated by ' '
from filenames;
quit;
CATS просто конкатенации и полосы. Я оставляю только &path
и &output
, поскольку они выглядят как глобальные макропеременные - конечно, если они также являются переменными, вы можете включить их одинаково.
В настоящее время &mcalllist
- это глобальная макропеременная, которая хранит ваши четыре макрокоманды (или, как многие из них были в этом наборе данных, по одному в строке)! Вы просто выполните
&mcalllist
и presto, он называет ваш макрос. Вы также можете использовать call execute
или построить файл и %include
его сделать то же самое, с некоторыми различными ограничениями. (Например, это может содержать не более 65 тыс. Символов).
SAS не поддерживает массивы в макропеременных. Однако есть много способов сделать то, что вы пытаетесь сделать. – Joe
Что вы пытаетесь сделать в файле analysis_file? В зависимости от того, что вы делаете, могут быть более простые способы в целом. – Reeza