在SAS中使用宏变量自动设置开始日期

在SAS中使用宏变量自动设置开始日期,sas,sas-macro,Sas,Sas Macro,背景: 我有一个代码,从当前日历季度开始提取事务性数据,但从一年前开始。 例如,如果我今天(2013年8月16日)运行代码,它将必须从2012年7月1日起提取所有数据 问题: 我想用一个宏变量自动化数据提取的开始日期 到目前为止,我被困在这里: %let ThisYear = %Sysfunc(Date(), YEAR.); %let LastYear= %eval(&ThisYear-1); /* I get the starting year */ %let QTR_start_m

背景: 我有一个代码,从当前日历季度开始提取事务性数据,但从一年前开始。 例如,如果我今天(2013年8月16日)运行代码,它将必须从2012年7月1日起提取所有数据

问题: 我想用一个宏变量自动化数据提取的开始日期

到目前为止,我被困在这里:

%let ThisYear = %Sysfunc(Date(), YEAR.);
%let LastYear= %eval(&ThisYear-1); /* I get the starting year */

%let QTR_start_month= %eval(3*%Sysfunc(Date(), qtr.)-2); /* this gives me the current quarter starting month. If I run it in August, it outputs 7 for July */

%let start_date=%str(01/%Sysfunc(month(&QTR_start_month))/&lcy);
最后一个宏变量输出我想要的日期,但格式不能被SAS识别

我将非常感谢任何帮助。
非常感谢

这应该可以完成这项工作

data test;
format todays_date starting_qtr date9.; 
todays_date=today();
/*this takes today's date and rolls back 4 qtrs and sets that date to the first day of that quarter*/
starting_qtr = intnx('qtr',todays_date,-4,'b');
/*so, running this code today, 16AUG2013 would yield starting_qtr=01JUL2012 */

call symputx('start_date', put(starting_qtr, date9.));

run;

%put &start_date.;

这应该可以完成任务

data test;
format todays_date starting_qtr date9.; 
todays_date=today();
/*this takes today's date and rolls back 4 qtrs and sets that date to the first day of that quarter*/
starting_qtr = intnx('qtr',todays_date,-4,'b');
/*so, running this code today, 16AUG2013 would yield starting_qtr=01JUL2012 */

call symputx('start_date', put(starting_qtr, date9.));

run;

%put &start_date.;

您可以将该日期输入到日期格式,或将其构造为SAS日期文字(“2013年7月1日”),
DDMONYY(YY)
,或直接将其构造为日期值

INTNX可能是构建它的最佳选择;你不需要所有的工作

%let start_date = %sysfunc(intnx(Quarter,%sysfunc(date()),-4),DATE9.);
%put &start_date;

你可以9号离开。将其用作日期文字,或删除
,DATE9.
以获取可直接使用的数值。您可以将其用作&code>“&start_Date.”d来使用日期文字。

您可以将该日期输入到日期格式,或者将其构造为SAS日期文字('2013年7月1日'),
DDMONYY(YY)
,或者直接将其构造为日期值

INTNX可能是构建它的最佳选择;你不需要所有的工作

%let start_date = %sysfunc(intnx(Quarter,%sysfunc(date()),-4),DATE9.);
%put &start_date;

你可以9号离开。将其用作日期文字,或删除
,DATE9.
以获取可直接使用的数值。您可以将其用作
“&start_Date.”d
来使用日期文字。

回答好-我喜欢将其放在SYSFUNC中,但您可以在这里很好地显示一些选项。回答好-我喜欢将其放在SYSFUNC中,但您可以在这里很好地显示一些选项。