date - SAS 和 INTNX 格式化

标签 date sas

我正在尝试查看变量是否落入日期边界。 我讨厌 MMDDYY10 中已有的 DATE1。

我使用以下代码

DATA GIANT; 
  SET GIANT; 
  UPPER_BOUND= intnx('week', DATE1, 2);  
run;

它给我返回了 Num 8 中的一些内容。

我想将其恢复为 MMDDYY10。,以便我可以将其与其他日期进行比较。

两个问题:

  1. 如何将长度为 8 的 NUMERIC 转换为日期?
  2. 为什么设计用于处理日期的 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/

相关文章:

javascript日期到字符串

SAS 合并数据集以覆盖值

encoding - 如何在 WLATIN1 编码的 SAS session 中使用 UTF-8 编码的文件?

utf-8 - 检查某个字母是否属于俄语字母表

sas - 将 NA 更改为 SAS 中的缺失值

Excel AVERAGEIF 以 TODAY() 函数作为条件

mysql - 如何在不使用 now() 的情况下在特定时间段内过滤 mysql 中的 select 语句

PHP:通过德语数组回显日期会导致错误

c# - PHP 等效于 C# ticks

sas - 在 SAS 中展平多个观测值