sas 输入宏日期,写为 yyyymmdd

标签 sas sas-macro

以下是我如何输入和使用日期作为宏变量:

%let x = %SYSEVALF('01jan2012'd);
%put &x; *see the date as sas sees it;
%put %SYSFUNC(putn(&x,yymmn.)); *see the date as yyyymm;

这很棒,但我厌倦了输入日期 '01jan2012'd 。在特殊情况下,我可能想将日期作为宏变量 y 传递,其中y格式为yyyymmdd ,像这样:

%let y = 20120101;
%let x = %SYSEVALF(&y);

当然,这是行不通的。所以,给定y ,我应该用什么来代替 %let x = %SYSEVALF(&y);x作为日期的宏变量,就像 sas 看到的日期一样?

最佳答案

首先:如果您手动输入它们,请使用 SAS 约定。输入“01JAN2012”。其一,它比 YYYYMMDD 值的可读性更快,而且无论如何,它都是其他 SAS 程序员所期望的。

第二:在任何一种情况下我都不会使用 %SYSEVALF() 。 %let x='01JAN2012'd;几乎在所有情况下都足够了,如果不是,那么你可能会以效率较低或标准的方式做某事。除非您打算在文本中的某处使用 18993(在这种情况下,好吧,您可以使用它),“01JAN2012”是将其存储在宏变量中的正确方法 - 让 SAS 稍后将其转换为 18993。

最后:

%let y=20120101;
%let x=%sysfunc(inputn(&y,YYMMDD8.));

是实现您所要求的最简单的方法。

关于sas 输入宏日期,写为 yyyymmdd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730079/

相关文章:

SAS MACRO 到循环月结束日期

sas - 如何对 SAS 宏变量使用算术运算符

sas - 使用在 SAS/IML 中生成的向量作为宏变量

SAS EG : project file version not supported

date - 如何使用 PROC SQL 将 200012 之类的数字列转换为 SAS 日期变量?

sas - 如果宏变量为空则跳过代码块

error-handling - SAS - 如果输入数据集中缺少变量,则将错误写入日志

sas - 将 SAS 数据集中的观测值读入数组

sas - 根据包含代码簿的单独数据集中的变量更改一个数据集中的 SAS 变量标签/属性 - PROC SQL?处理数据集?

SAS - 检查外部文件 (.csv) 是否为空;如果没有,导入到 SAS