2014-10-02 63 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

相关问题