Массивы в макросах в SAS
%macro test ;
%array factors(7) &ordered_col ;
%array names(7) &ordered_col2 ;
%do i = 1 %to 7 ;
%let factorname = factors(&i) ;
%let output = names(&i) ;
proc sort data=actshare.policy out=&output nodupkey ;
by &factorname ;
quit ;
%end ;
%mend ;
%test
где orders_col и orders_col2 - мои соответствующие массивы. как я могу запустить эту программу. Пожалуйста, помогите с подходящим предложением.
1 ответ
Не существует такой вещи, как макро-массив или %ARRAY
заявление. Если у вас есть список значений в макропеременной, используйте функцию%SCAN(), чтобы выбрать элементы из списка.
%macro test(varlist,dslist);
%local factorname output i ;
%do i = 1 %to %sysfunc(countw(&varlist)) ;
%let factorname = %scan(&varlist,&i) ;
%let output = %scan(dslist,&i) ;
proc sort data=actshare.policy out=&output nodupkey ;
by &factorname ;
run ;
%end ;
%mend test;
%test(var1 var2 var3,ds1 ds2 ds3)
Если вместо этого вы создали серию макропеременных с одинаковым базовым именем и числовым суффиксом, вам нужно знать их количество, чтобы выполнить цикл%DO. Так что, если вы сделали:
%let varname1=var1;
%let varname2=var2;
%let dsname1=ds1;
%let dsname2=ds2;
%let n=2;
Тогда ваш цикл может выглядеть так:
%do i=1 %to &N;
%let factorname = &&varname&i ;
%let output = &&dsname&i ;
...
%end;