我有一份SAS声明。 %let data = SampleData_200001_201603;
每次运行代码时,数据名称都在变化。例如:
在201604中运行,然后名称= SampleData_200001_201603;
在201605中运行,然后是name = SampleData_200001_201604;
在201606运行,然后名称= SampleData_200001_201605;
我怎么写%let data =;让它自动化?谢谢。
答案 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 ***