2016-12-12 6 views
0

こんにちは私は特定のタスクのための汎用マクロを持っています&対応するマクロがコンパイルされて実行されます。マクロ呼び出しが遅くなりますが、必要なマクロ呼び出しを実行すると、誰かが自動的にマクロを実行する別の解決策を提供することができます。sas autosを使用して複数のマクロを呼び出す方法

以下

は私のマクロオフ場所である - あなたの目標は、すべてのフォルダに保存されたマクロを再コンパイルを避けるためにある場合>

%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

- >以下 F:\SAS\BI\macro

は場所の私のサンプルマクロですあなたがそれらを使用するときは、option sasautos="F:\SAS\BI\macro";を設定することでこれを達成できるはずです。ただし、使用する各マクロは、マクロと同じ名前の別の.sasファイルに保存されていれば、動作するはずです。

適切に現代版のSASを使用している場合は、既存のsasautosの設定を保持するため、RawFocusの提案を行ってください。あなたの新しいフォルダに同じ名前のマクロを持っており、既存のsasautosのフォルダのいずれかの場合

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

これはまだマクロ行動のいくつかの変更が発生する可能性があります。

+0

このアプローチは、sasautosの現在の値を上書きします。 'options insert =(sasautos =" F:¥SAS¥BI¥macro ");' –

+0

'sasautos'リストのどこに新しいパスが挿入されていますか? – user667489

+0

先頭/先頭(マクロは優先順位ツリーの最初に呼び出されます) –

0

自動呼び出しマクロを使用する場合は、アップロードしたコードの最後の行にあるマクロ呼び出しではなく、マクロ定義のみを含めるようにしてください。また、ファイル名は、拡張子が.sasのマクロ名である必要があります。この場合、ファイル名はrand.sasでなければなりません。 UNIX上でSASを実行する場合、ファイル名はすべて小文字でなければなりません。

SASAUTOSオプションの設定にマクロ定義のファイルが格納されている場所のパスを追加するだけです。その後、SASプログラムで必要な場所にマクロを呼び出すことができます。

options sasautos=('F:\SAS\BI\macro\',sasautos); 
%rand(dsn1=numerics.itoh,dsn2=numerics.htoo,odsn=numerics.itoo); 
関連する問題