2014-10-02 65 views
1

我正在尋找在Date9中傳遞日期的正確方法。格式從一個源文件(可能是一個文本文件)到另一個sas程序文件。SAS - 將日期從一個文件傳遞到另一個程序變量

在我的SAS程序中,我有以下幾點:

%MACRO Getdate; 
DATA getDate; 
infile 'h:\dates.txt'; 
input @1 date9.; 
run; 
%MEND Getdate; 

文件dates.txt的conent是這樣的: 28JAN2014

我不知道如何得到這個日期伸到一個變量,以便我可以在另一個宏中使用它設置某個查詢的開始日期和結束日期。

對不起,我是SAS新手,想盡快學習,只是想知道如何解決這個問題。

+1

有幾個方法可以做到這一點。檢查doco中數據步驟中的'symput'函數。你可能不需要一個已命名的數據集,你可以使用'data _null_'。 – sasfrog 2014-10-02 02:54:47

+1

謝謝sasfrog,我確實看過這些,Reese的邏輯幫助我解決了這個問題。絕對感謝您的意見:)) – vbala2014 2014-10-03 15:15:06

回答

2

您可以使用調用symputX和Global選項來確保宏變量在宏外可用。我想知道你爲什麼需要一個宏,但是:)。 您可能還想了解SAS存儲日期的方式,因爲它們是應用格式的數字。

%MACRO Getdate; 
DATA _null_; 
infile 'h:\dates.txt'; 
input @1 date date9.; 
call symputx('date_stored', put(date, date9.), G); 
run; 
%MEND Getdate; 

%getdate; 

%put &date_stored.; 

編輯:根據你的答案/下面的評論:

%MACRO Getdate; 
%let date_stored=0; 
DATA _null_; 
infile 'h:\dates.txt'; 
input @1 date date9.; 
call symputx('date_stored', put(date, date9.), G); 
call symputx('start_date', put(date-45, date9.), G); 
call symputx('end_date', put(date-14, date9.), G); 
run; 


%MEND Getdate; 

*CHECK if they exist after macro is run; 
%put &date_stored; 
%put &start_date; 
%put &end_date; 
+0

非常感謝你Reese :))),這絕對適合我。我能夠得到日期,並用它來做我自己的操作。我給你的答案進行了綠色檢查,因爲我還沒有給你一個代表+1 – vbala2014 2014-10-03 15:10:00

0

因此,使用Reese的邏輯,我制定了我的回答如下:

%MACRO Getdate; 
%let date_stored=0; 
DATA _null_; 
infile 'h:\dates.txt'; 
input @1 date date9.; 
call symputx('date_stored', put(date, date9.), G); 
run; 

%put &date_stored; 

%let start_date=%SYSFUNC(INTNX(day,"&date_stored"d,-45),date9.); 
%let end_date=%SYSFUNC(INTNX(day,"&date_stored"d,-14),date9.); 
%put &start_date; 
%put &end_date; 

%MEND Getdate; 
%getdate; 
+1

檢查你的變量範圍。您的%getdate宏運行後,是否存在&start_date和&end_date?我不希望它...... – Reeza 2014-10-03 15:24:23

+1

您也可以將您的開始/結束日期計算權移動到您的數據_null_步驟中,以避免宏計算。 – Reeza 2014-10-03 15:25:24

+0

謝謝Resse的提示,我會保持這種想法。現在,我有足夠的代表點,我會+1你的答案:)感謝您的時間和幫助,深表謝意 – vbala2014 2014-10-05 15:57:56

相關問題