我正在尝试查看变量是否落入日期边界。 我讨厌 MMDDYY10 中已有的 DATE1。
我使用以下代码
DATA GIANT;
SET GIANT;
UPPER_BOUND= intnx('week', DATE1, 2);
run;
它给我返回了 Num 8
中的一些内容。
我想将其恢复为 MMDDYY10。
,以便我可以将其与其他日期进行比较。
两个问题:
- 如何将长度为 8 的 NUMERIC 转换为日期?
- 为什么设计用于处理日期的 intnx ... 返回数字而不是相同格式的内容?
我尝试像这样转换它:
DATA GIANT;
SET GIANT;
UP_DATE=INPUT(PUT(UPPER_BOUND, 8.), MMDDYY10.);
FORMAT UP_DOS MMDDYY10.;
run;
但现在一切都变成空了。
最佳答案
SAS 日期始终为数字(自 1960 年 1 月 1 日起的天数)。日期格式只是使数字可读的一种方法。 INTNX 返回一个数字,因为这就是日期;您可以将日期格式应用于新变量。
就你而言,这很简单。您的尝试几乎成功了,但您不需要输入/放置业务。
data giant;
set giant;
upper_bound=intnx('week',Date1,2);
format upper_bound MMDDYY10.;
run;
INPUT
将人类可读的文本转换为值(通常是数字)。 PUT 将值转换为人类可读的文本。 PUT(INPUT(...))
通常用于将格式化值转换为不同类型的格式化值(例如,将字符串“1/1/1960”转换为“01JAN1960”) ); INPUT(PUT(...))
不太常用,除非您正在解析 PUT
创建的字符串(例如,仅读取特定日期元素或其他内容)像那样)。在大多数情况下,两者都会更改类型(从 PUT 中的数字更改为字符或 INPUT 中的其他方式),并且肯定会更改实际存储的值。
对数字列应用格式会使该列保留为数字(这通常很好),但告诉 SAS 如何显示该数字,以便您可以理解它(通常也很好)。因此,下面的值是 19857
,但显示的是 05/14/2014
。
关于date - SAS 和 INTNX 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452607/