【问题标题】:SAS Export date formatSAS 导出日期格式
【发布时间】:2016-01-26 09:08:17
【问题描述】:

您好,我正在尝试从一个日期文件夹中导入数据(成功),因此文件路径为 /year/month/date(*今天的日期)

然后我正在调整一些数据(再次成功)。完成后,我想将其导出到一个文件夹,该文件夹比我从中提取它的文件夹提前 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 宏函数引用的函数 MONTH 的参数 1 不是 一个号码。 错误:在 %SYSCALL、%SYSFUNC 或 %QSYSFUNC 参数列表中检测到无效参数。执行 %SYSCALL 语句或 %SYSFUNC 或 %QSYSFUNC 函数引用已终止。

但我无法理解它,任何帮助将不胜感激。

【问题讨论】:

  • &TWENTYNINE 不是数字,而是格式化的日期...
  • 谢谢哥们,你会怎么做才能改变它以使其正确读取。对不起,这让我困惑了几天。曾经有过你无法真正想象问题的那一刻......
  • 您需要将 P_DATE 设为从今天开始的 29 天吗?
  • 是的,它们都在同一个文件目录中。

标签: sas


【解决方案1】:

使用 %sysfunc 很方便:

%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

【讨论】:

  • 我会试一试并回复您,非常感谢您的快速回复。
  • 原来我也搞砸了 P_Date。它以 ******** 的形式回归
  • 查看我的编辑。这有点矫枉过正,但是您同时拥有格式化变量和宏变量,其中包含带有斜杠的完整日期...
  • 谢谢伙计,不会检查你的但会尝试自己保存,非常感谢帮助:)
  • 嘿任何时候,这很有趣! :)
【解决方案2】:

如果您想确定用于今天日期的源路径,请使用TODAY() 函数。您可以应用YYMMDDS 格式使其显示为 YYYY/MM/DD。

%let frompath=%sysfunc(today(),yymmdds10);

如果要从源路径计算目标路径,则可以使用INPUTN() 函数将其转换回日期,添加 29 并使用PUTN() 函数将其转换回字符串。

%let topath=%sysfunc(putn(29+%sysfunc(inputn(&frompath,yymmdd10)),yymmdds10));

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2013-01-11
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多