2

メールの最初と最後を繰り返さずに、テーブルのレコードをループして HTML メールにデータを入力することは可能ですか?

この例では、1 行の 5 つのテーブルを含むメールを取得します (これWORK.MyEmailTableは 5 つのレコードのテーブルでありset、データ ステップでループを作成するためです)。

data _null_;
   file mymail;
   set WORK.MyEmailTable;

   put '<html><body><table>';

   ***loop through all records;
   put '<tr>';
   put %sysfunc(cats('<td>',var1,'</td>'));
   put %sysfunc(cats('<td>',var2,'</td>'));
   put %sysfunc(cats('<td>',var3,'</td>'));
   put '</tr>';

   put '</table></body></html>';

run;

そして、5行のテーブルを1つ探しています。

データステップで put使用する場合、メールの最初と最後を再帰的に防ぐ方法があるかどうかはわかりません。set

(更新するかどうか不明な場合はお知らせください。)

ありがとうございました、

4

2 に答える 2

2

_n_自動データステップ変数を使用して、最初の観測にいることを知らせ、setステートメント オプションを使用end=して、最後の観測にいることを知ることができます。

data _null_;
    file mymail;
    set WORK.MyEmailTable end=eof;

    if _n_ eq 1 then do;
      put '<html><body><table>';
    end;

    /*loop trhough all records*/
    put '<tr>';
    put %sysfunc(cats('<td>','_n_=',n,' eof=',eof,' ',var1,'</td>'));
    put %sysfunc(cats('<td>','_n_=',n,' eof=',eof,' ',var2,'</td>'));
    put %sysfunc(cats('<td>','_n_=',n,' eof=',eof,' ',var3,'</td>'));
    put '</tr>';

    if eof then do;
      put '</table></body></html>';
    end;
run;

_n_値と出力を追加したeofので、それらがどのように機能するかを明確に確認できます。

于 2015-10-21T14:40:00.337 に答える