2009-05-27 19 views
2

出力ファイル名に追加するタイムスタンプを作成するマクロがあります。しかし、マクロがどのマクロ変数に値を割り当てるか覚えておく必要はなく、マクロの結果にマクロ変数を割り当てることが好ましいでしょう(それが十分に円形でない場合)。マクロの結果をSASのマクロ変数にどのように割り当てるのですか?

%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 ; 

おかげで....

答えて

6

戻り値を持つマクロは通常、マクロ機能と呼ばれています。あなたがセミコロンを使わずに式/値を置くと、それは呼び出し元に値を返します。戻り値がif-elseブロックにある場合、必要であろう。

基本的には、マクロ内で%let tms = fromを指定して削除することができます。そして、はい、私はそれが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**; 

、あなたはこの

%sysfunc(compress(_&tms_date.&tms_time,"-:")); 
のような%スキャン機能の圧縮機能のINSEADを使用することにより、多少のコード​​を簡素化することができます
関連する問題