在SAS中将字符串转换为日期
Converting string to date in SAS
我已经创建了这个宏变量并打印了它:
%let date = input('22Aug2020',date9.);
%put &date;
但是当我打印它时,它打印:
input('22Aug2020',date9.)
哪里出错了?
这通常会满足您的需要 - 添加结尾的 d,tells SAS to interpret the value as a date。
%let date = '22AUG2020'd;
%put &date.;
SAS 会将尾随 d
的 22Aug2020 解释为 SAS 日期,并在 99% 的时间内正确处理它。
您问题的直接答案是您忘记了宏变量是 text,因此 SAS 正按照您的要求进行操作。
如果你想要一个宏变量包含一个函数被解析,你使用%sysfunc
.
%let date = %sysfunc(inputn(22AUG2020,date, 9));
inputn
是执行输入和 returns 数字(如您所愿)的函数。您可能会注意到两件事:
%SYSFUNC
不使用引号 - 将其关闭,除非您希望文本字符 "
或 '
实际出现。它不用于分隔文本值。
INPUTN
有几种方法可以指定信息名称。您可以在一个参数中提供 date9.
,或者您可以按照我的方式将其拆分,两者都可以。
但更好的方法是如 Reeza 所说 - 直接使用 '22AUG2020'd
指令。
我已经创建了这个宏变量并打印了它:
%let date = input('22Aug2020',date9.);
%put &date;
但是当我打印它时,它打印:
input('22Aug2020',date9.)
哪里出错了?
这通常会满足您的需要 - 添加结尾的 d,tells SAS to interpret the value as a date。
%let date = '22AUG2020'd;
%put &date.;
SAS 会将尾随 d
的 22Aug2020 解释为 SAS 日期,并在 99% 的时间内正确处理它。
您问题的直接答案是您忘记了宏变量是 text,因此 SAS 正按照您的要求进行操作。
如果你想要一个宏变量包含一个函数被解析,你使用%sysfunc
.
%let date = %sysfunc(inputn(22AUG2020,date, 9));
inputn
是执行输入和 returns 数字(如您所愿)的函数。您可能会注意到两件事:
%SYSFUNC
不使用引号 - 将其关闭,除非您希望文本字符"
或'
实际出现。它不用于分隔文本值。INPUTN
有几种方法可以指定信息名称。您可以在一个参数中提供date9.
,或者您可以按照我的方式将其拆分,两者都可以。
但更好的方法是如 Reeza 所说 - 直接使用 '22AUG2020'd
指令。