SAS,使宏变量包含YYYYMM

时间:2016-04-20 14:58:40

标签: sas

我有一份SAS声明。     %let data = SampleData_200001_201603;

每次运行代码时,数据名称都在变化。例如:

在201604中运行,然后名称= SampleData_200001_201603;

在201605中运行,然后是name = SampleData_200001_201604;

在201606运行,然后名称= SampleData_200001_201605;

我怎么写%let data =;让它自动化?谢谢。

3 个答案:

答案 0 :(得分:2)

如果您使用的是当前日期,则可以使用YYMMN6.格式获取该格式的日期。

%let data = SampleData_200001_%sysfunc(date(),yymmn6);

如果您需要上个月,请使用INTNX()功能。

%let data = SampleData_200001_%sysfunc(intnx(month,%sysfunc(date()),-1),yymmn6);

答案 1 :(得分:0)

%let date = 201603;
%let data = SampleData_200001_&date.;

并循环显示日期列表

答案 2 :(得分:0)

我有足够多%的sysfunc来获得我想要的东西。我编写了一个宏例程,允许使用我们想要的格式将日期分配给宏变量。 %sysfunc没有曲折。

代码为here。它允许你这样做:分配一个名为" thisMonth"的宏变量。 today()的值,格式为YYMMn6.

%letdate(thisMonth, today(), fmt=YYMMn6.)

log says:
 *** Variable macro thisMonth = 201604 ***

然后

%let myFile = someName_&thisMonth;
%put &myFile;

log says:
someName_201604

宏用法语记录,但在大多数情况下它应该是不言自明的。

修改 请注意,您可以使用通常保留给数据步骤的任何函数作为第二个参数:

%letdate(firstDayLastMonth, intnx("MONTH", today(), -1, "BEGIN"), date9.)

log says:
 *** Variable macro firstDayLastMonth = 01MAR2016 ***