SAS和INTNX格式化

时间:2014-12-12 21:45:44

标签: date sas

我试图查看变量是否属于日期边界。 我讨厌MMDDYY10中的DATE1。

我使用以下代码

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

它让我回到了Num 8

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

两个问题:

  1. 如何将长度为8的NUMERIC转换为日期?
  2. 为什么设计用于日期的intnx会返回一个数字而不是相同格式的东西?
  3. 我试图像这样转换它:

    DATA GIANT; 
      SET GIANT; 
      UP_DATE=INPUT(PUT(UPPER_BOUND, 8.), MMDDYY10.);
      FORMAT UP_DOS MMDDYY10.; 
    run;
    

    但现在一切都是空的。

1 个答案:

答案 0 :(得分:5)

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/206"转换为" 01JAN1960") ;除非您正在解析INPUT(PUT(...))创建的字符串(例如,只读取特定日期元素或类似内容),否则PUT不常用。在大多数情况下,两者都会改变类型(从PUT中的数字到字符或INPUT中的其他方式),并且肯定会改变实际的存储值。

将数据应用于数字列会使列成为数字(通常很好),但会告诉SAS如何显示该数字以便您可以理解它(通常也很好)。因此,值下面是19857,但显示的是05/14/2014