2017-03-09 51 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; 

如何解析datalines中的宏變量?如何在數據庫中使用宏變量?

回答

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; 
相關問題