2016-12-12 1 views
0

привет, у меня есть общие макросы для конкретных задач, как я могу автоматически вызывать макрос &, соответствующий макрос скомпилирован и выполнен. Я попытался запустить определенный макрос в журнале и затем вызвать конкретный макрос, но его замедлить, но может ли кто-нибудь предоставить другое решение для автоматического выполнения макроса при выполнении требуемого вызова макроса ... спасибо заранее.как вызвать несколько макросов с помощью sas autos

ниже место с моей макро -> F:\SAS\BI\macro

ниже мой пример макроса в месте ->

%macro rand(dsn1=,dsn2=,odsn=); 
Data &dsn1; 
    do i=1 to 27; 
     t=rand("uniform")*40; 
    do j=1 to 10; 
     w=rand("uniform"); 
     bj=0.2; 
     sigma=0; 
     sigma+(t*w)+bj; 
     y=1/(1+exp(-sigma));  
     output; 
    end; 
    end; 
run; 

Data &dsn2; 
    set &dsn1(keep=y); 
    do j=1 to 10; 
     *y=y; 
    do k=1 to 5; 
     w2=rand("uniform"); 
     bk=0.3; 
     sigma2=0; 
     sigma2+(y*w2)+bk; 
     z=1/(1+exp(-sigma2)); 
     output; 
    end; 
    end; 
run; 

data &odsn; 
    set &dsn1 &dsn2; 
run; 
%mend; 
%rand(dsn1=numerics.itoh,dsn2=numerics.htoo,odsn=numerics.itoo); 
+1

Можете ли вы объяснить, что слишком медленно? Если макрос работает медленно, я не уверен, что есть что-то, что вы можете сделать, помимо изменения макроса, чтобы сделать его более эффективным. – Reeza

ответ

1

Если ваша цель состоит в том, чтобы избежать повторной компиляции макросов, сохраненных в папке каждый время, в которое вы их используете, вы сможете достичь этого, установив option sasautos="F:\SAS\BI\macro";. При условии, что каждый макрос, который вы хотите использовать, сохраняется в отдельном файле .sas с тем же именем, что и макрос, который должен работать.

Если вы используете подходящую современную версию SAS, то вместо этого используйте предложение RawFocus, так как это сохраняет все существующие настройки sasautos.

options insert=(sasautos="F:\SAS\BI\macro"); 

Это все еще может вызвать некоторые изменения в макро-поведении, если у вас есть макросы с тем же именем в новой папке и любые из существующих sasautos папок.

+0

Этот подход заменит текущее значение sasautos. Вместо этого используйте следующие опции: 'options insert = (sasautos =" F: \ SAS \ ​​BI \ macro ");' –

+0

. Где в списке 'sasautos' находится новый путь? – user667489

+0

наверху/в начале (макросы там будут вызываться сначала в дереве приоритетов) –

0

Если вы хотите использовать макросы autocall, тогда файл должен включать только определение макроса, а не макрокоманд, который находится в последней строке кода, который вы опубликовали. Также имя файла должно быть именем макроса с расширением .sas. Поэтому в этом случае имя файла должно быть rand.sas. Если вы используете SAS в unix, имя файла должно быть в нижнем регистре.

Вам просто нужно добавить путь к тому, где хранятся файлы с определениями макросов в настройке для параметра SASAUTOS. Затем вы можете вызвать макрос в любом месте в вашей программе SAS.

options sasautos=('F:\SAS\BI\macro\',sasautos); 
%rand(dsn1=numerics.itoh,dsn2=numerics.htoo,odsn=numerics.itoo); 
Смежные вопросы