您好我正在尝试从一个日期文件夹导入数据(成功),因此文件路径读取/年/月/日(*今天的日期)
然后我调整了一些数据(再次成功)。完成后,我想将它导出到我从中取出它的文件夹前29天的文件夹。
这是我当前的宏:
%LET TODAY = %SYSFUNC(TODAY());
%PUT &TODAY;
%LET TODAYA = %SYSFUNC(PUTN(&TODAY,DDMMYYn8.));
%PUT &TODAYA;
%LET TWENTYNINE = %SYSFUNC(PUTN(&TODAY.+29,DDMMYYn8.));
%PUT &TWENTYNINE;
%LET T_DATE = %SYSFUNC(PUTN(&TODAY,DDMMYYn8..));
%LET T_YEAR = %SYSFUNC(YEAR(&TODAY));
%LET T_MONTH = %SYSFUNC(MONTH(&TODAY));
%LET P_DATE = %SYSFUNC(PUTN(&TWENTYNINE,DDMMYYn8..));
**%PUT &P_DATE;
%LET P_YEAR = %SYSFUNC(YEAR(&P_DATE));
%LET P_MONTH = %SYSFUNC(MONTH(&P_DATE));**
P_Date显示错误:
错误:%SYSFUNC或%QSYSFUNC宏功能引用的参数1到函数MONTH不是 一个号码。 错误:%SYSCALL,%SYSFUNC或%QSYSFUNC参数列表中检测到的参数无效。执行 %SYSCALL语句或%SYSFUNC或%QSYSFUNC函数引用终止。
但我无法理解任何帮助会受到大力赞赏。
答案 0 :(得分:0)
Imbricating%sysfunc' s很方便:
%LET P_YEAR = %SYSFUNC(YEAR(%SYSFUNC(TODAY())+29));
%LET P_MONTH = %SYSFUNC(MONTH(%SYSFUNC(TODAY())+29));
%PUT &P_YEAR &P_MONTH;
结果:
2016 2
修改强>
(首先尝试自己解决,但这里是一个完整的解决方案......)
data _null_;
target = today() + 29;
format target YYMMDDS10.;
put target=;
call symput("target", put(target, YYMMDDS10.));
run;
%put ⌖
2016/02/24
答案 1 :(得分:0)
如果要确定今天使用的源路径,请使用TODAY()
功能。您可以应用YYMMDDS
格式将其显示为YYYY / MM / DD。
%let frompath=%sysfunc(today(),yymmdds10);
如果要从源路径计算目标路径,则可以使用INPUTN()
函数将其转换回日期,添加29并使用PUTN()
函数将其转换回字符串。
%let topath=%sysfunc(putn(29+%sysfunc(inputn(&frompath,yymmdd10)),yymmdds10));