2016-03-22 26 views
0

sasを使用してマクロを書きました。次のコードを使用して、ログを外部のtxtファイルに保存しました。SAS結果出力ウィンドウに文を表示する方法

proc printto log="path\log.txt"; run; 

%macro loop(num); 

    for i = 1 : # 
    data a; 
    set a; 
    display &i; 
    run;  
%mend; 

% loop(100) 

proc printto; run; 

私のプログラムはループのように動作します。 i = 1 : 100の場合は、i = i +1を実行してください。私は各ループの最後にiを表示したいので、プログラムがどこにあるのか分かります。ログと混在して読みにくいので、log /(log txtファイル)に表示したくありません。だから私はput "&i"機能を使用することはできません。

i(多分結果出力ウィンドウ?)を表示する場所があれば教えてください。もしそうなら、どうすればいいですか。

+0

どのような環境でSASを実行していますか? PC SASまたはEnterprise GuideまたはSASスタジオまたは...? – Quentin

+0

PC SASのバージョンはSAS 9.4 – fly36

答えて

1

これを置く場所はログです。これを目に見えるようにするための多くのトリックが存在します。

  • ログは、異なる色で物事を強調方法は、キーワードNOTE:WARNING:によって駆動され、ERROR:。もしあなたが少し誤解を招くようなログノートを気にかけなければ、それらをあなたの利点に使うことができます。
  • 大量の処理中に余分なログメッセージをオフにするか、別の場所にリダイレクトします。これはマクロ内で行うのが一般的です。このよう
  • 使用のもの:

コード:

%put ********************************************************; 
%put * ITERATION &i BEGINNING        *; 
%put ********************************************************; 

、それはあなたが求めているものを行うには確かに可能だと述べているすべて。問題は、あなたがそれをどこに見ておくと便利なのかです。

2つの提案。

最初に:ods textが結果ウィンドウに出力されますが、印刷する必要があります(それだけでは表示されません)。実際にtitleを使用するのと似ているわけではありません。

%macro test; 
    %do i=1 %to 10; 
    ods text="Running &i. Iteration"; 
    proc print data=sashelp.class; 
    run; 
    %end; 
%mend test; 
%test; 

同様に、あなたは繰り返し回数を表示する結果エクスプローラウィンドウを取得するためにods proclabelを使用することができます。

%macro test; 
    %do i=1 %to 10; 
    ods proclabel="&i. Iteration"; 
    proc print data=sashelp.class; 
    run; 
    %end; 
%mend test; 
%test; 

私は後者がもっと好きです。何が起こっているのかを簡単に確認できます。

しかし、どちらも大きな制限があります。マクロが実行されている間に何が起こっているのかを一般的に見ることはできません。 のために何か必要があります目的私は、SAS環境外のファイルを更新すると思われます。ログ以外のものは、IDEがSASのことを考えている間に、しばしば「凍結」されます。

これを「私たちがどれだけ遠くにいるか」のようなものとして使用することを目指すなら、いくつかの選択肢があります。

まず、SAS/AFウィンドウでこのトリックを行う可能性があります。例についてはAster, NESUG '92を参照してください。

第2に、ファイルに書き込みます。

filename monitor "c:\temp\monitor.dat"; 
%macro test; 
    %do i=1 %to 100; 
    data _null_; 
     file monitor mod; 
     put "Iteration &i started"; 
    run; 
    *... do stuff ...; 
    %end; 
%mend test; 
%test; 

これは基本的には独自のセカンダリログを作成することです。このログは、ここではおそらく最良の妥協のようです。 SYMBOLGENをオンにすると、ログに同じ情報が表示されます。

+0

です。こんにちは。あなたが提案した最後のソリューションを実装しようとしています。 monitor.datファイルを開いて確認する方法を教えてください。 – fly36

+0

これは単なるテキストファイルです。テキストエディタで開きます。 。 – Joe

1

PC SASを使用しているので、対話型セッションでは、データステップPUTステートメントを使用してログまたは出力ウィンドウに書き込むことができます。 PC sasでは、ログと出力ウィンドウがリアルタイムで更新されます(EGとは異なります)。

%macro testmsg 
    (nloop=5 
    ,file=log /* log | print */ 
    ) 
; 
    %local i ; 
    %do i=1 %to &nloop ; 
    data _null_ ; 
     file &file ; 
     x=sleep(3) ; 
     put "&i" ; 
    run ; 
    %end ; 
%mend testmsg ; 

%testmsg(file=log) 
%testmsg(file=print) 
関連する問題