2017-03-09 19 views
0
%let stmDate = 05FEB2017; 
%let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.); 

data header; 
    input statement_date date7. 
     statement_due_date date7.; 
    format statement_date date7. 
     statement_due_date date7.; 
    datalines; 
    &stmDate &stmDueDate 
run; 

データライン内のマクロ変数を解決するにはどうすればよいですか?データラインでマクロ変数を使用するには?

答えて

1

SASはマクロコードをDATALINESに展開しません。あなたのサンプルプログラムには必要がないことに注意してください。マクロ変数を使用して、データセット変数を設定するために必要なコードを生成するだけです。

data header; 
    statement_date = "&stmDate"d; 
    statement_due_date = "&stmDueDate"d ; 
    format statement_date statement_due_date date9.; 
run; 

しかし、あなたがそのファイルに分解ラインを変換し、そのファイルからの読み込みにPROC STREAMを見てみましょうこれを行うにはしたくなかった場合。

マクロ変数を作成してください。

%let stmDate = 05FEB2017; 
%let stmDueDate = %sysfunc(intnx(day,"&stmDate"d,20),date9.); 

次に、PROC STREAMを使用してデータファイルに変換します。あなたはマクロ関数呼び出しを持つことさえできます。

filename text temp; 

proc stream outfile=text; begin 
&stmDate &stmDueDate 
&stmDate %sysfunc(intnx(day,"&stmDate"d,20),date9.) 
;;;; 

次に、生成されたファイルから読み取ります。一般的に、改行は削除されるので、INPUTステートメントに@@を使用するとよいでしょう。

data header; 
    infile text ; 
    input statement_date statement_due_date @@ ; 
    format _numeric_ date9.; 
    informat _numeric_ date9.; 
run; 
関連する問題