Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date SAS-将日期从一个文件传递到另一个程序变量_Date_Sas - Fatal编程技术网

Date SAS-将日期从一个文件传递到另一个程序变量

Date SAS-将日期从一个文件传递到另一个程序变量,date,sas,Date,Sas,我正在寻找在Date9中传递日期的正确方法。将一个源文件(可以是文本文件)格式化为另一个sas程序文件 在我的SAS程序中,我有以下内容: %MACRO Getdate; DATA getDate; infile 'h:\dates.txt'; input @1 date9.; run; %MEND Getdate; 文件dates.txt的内容如下: 2014年1月28日 我不知道如何将该日期输出到变量中,以便在另一个宏中使用它来设置某个查询的开始日期和结束日期 抱歉,我是SAS的新手,正在

我正在寻找在Date9中传递日期的正确方法。将一个源文件(可以是文本文件)格式化为另一个sas程序文件

在我的SAS程序中,我有以下内容:

%MACRO Getdate;
DATA getDate;
infile 'h:\dates.txt';
input @1 date9.;
run;
%MEND Getdate;
文件dates.txt的内容如下: 2014年1月28日

我不知道如何将该日期输出到变量中,以便在另一个宏中使用它来设置某个查询的开始日期和结束日期


抱歉,我是SAS的新手,正在尝试尽快学习。我只是想知道如何解决这个问题。

您可以使用call symputX,并使用全局选项来确保宏变量在宏外部可用。我想知道为什么您需要一个宏来实现这一点:)。 您可能还想了解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;

因此,利用里斯的逻辑,我将我的答案表述如下:

%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;

有几种方法可以做到这一点。检查数据步骤中的
symput
功能的doco。您可能不需要命名的数据集,您可以只使用
数据\u空值
。感谢Sasprog,我确实查找了这些数据集,下面的Reese逻辑帮助我解决了问题。当然非常感谢你的意见:))非常感谢你,里斯:)),这对我来说绝对有效。我能够得到日期,并用它做我自己的操作。我给你的答案是绿色的,因为我仍然没有代表点给你+1检查你的变量范围。%getdate宏运行后是否存在开始日期和结束日期(&S)?我不希望这样……您也可以将开始/结束日期计算直接移动到数据空步骤中,以避免宏计算。感谢RESE的提示,我会记住这一点。现在我有了足够的代表点,我将+1你的答案:)谢谢你的时间和帮助,非常感谢