我正在寻找在Date9中传递日期的正确方法。格式从一个源文件(可以是文本文件)到另一个sas程序文件。
在我的SAS计划中,我有以下内容:
%MACRO Getdate;
DATA getDate;
infile 'h:\dates.txt';
input @1 date9.;
run;
%MEND Getdate;
文件dates.txt的内容是这样的: 28JAN2014
我不知道如何将这个日期输入变量,以便我可以在另一个宏中使用它来设置某个查询的开始日期和结束日期。
对不起我是SAS的新手,我想尽快学习它,只是想知道如何解决这个问题。
答案 0 :(得分: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;
答案 1 :(得分: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;