2

タイムスタンプを作成するマクロがあります(出力ファイル名に追加するため)。ただし、マクロが値を割り当てるマクロ変数を覚えておく必要はなく、マクロの結果にマクロ変数を割り当てることをお勧めします(十分に循環していない場合)。

%let tms= %tms();

これは現在のマクロです。

%macro tms ;
    %* Create a Timestamp ;
 %let tms_date= %sysfunc(date(),yymmdd10.) ;  %* Todays date ;
 %let tms_time= %sysfunc(time(),time.) ;      %* Current Time ;

    %* Format mmddyyhhmmss ;
 %let tms=_%scan(&tms_date,1)%scan(&tms_date,2)%scan(&tms_date,3)%scan(&tms_time,1,:)%scan(&tms_time,2,:)%scan(&tms_time,3,:) ;

%mend ;

これを機能させるためにどのように引用しますか?また、マクロから「%let tms =」を削除するだけですか?

また、次のODS割り当てステートメントでも同じ引用が機能しますか?

ods Tagsets.excelxp file="&outname.&tms..xml" style= Styles.XLsansPrinter ;

お時間を割いていただきありがとうございます。

4

1 に答える 1

6

戻り値のあるマクロは通常、マクロ関数と呼ばれます。修正ステートメントの前に、セミコロンなしで式/値を入力すると、呼び出し元に値が返されます。戻り値がif-elseブロックにある場合、; 必要だろう。

基本的に、提案どおりに実行し、マクロ内から%lettms=を削除できます。そして、はい、私はそれがods割り当てステートメントで動作すると信じています。

%macro tms ;
    %* Create a Timestamp ;
 %let tms_date= %sysfunc(date(),yymmdd10.) ;  %* Todays date ;
 %let tms_time= %sysfunc(time(),time.) ;      %* Current Time ;

        %* Format mmddyyhhmmss ;
 _%scan(&tms_date,1)%scan(&tms_date,2)%scan(&tms_date,3)%scan(&tms_time,1,:)%scan(&tms_time,2,:)%scan(&tms_time,3,:) 
%mend;
%let tms=%tms;
%put **&tms**;

別の提案として、このような%scan関数の内部にあるcompress関数を使用することで、コードをいくらか単純化できます。

%sysfunc(compress(_&tms_date.&tms_time,"-:"));
于 2009-05-27T19:01:03.260 に答える