SAS和INTNX格式化

Jac*_*Ian 2 date sas

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

我使用以下代码

DATA GIANT; 
  SET GIANT; 
  UPPER_BOUND= intnx('week', DATE1, 2);  
run;
Run Code Online (Sandbox Code Playgroud)

它让我回来了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;
Run Code Online (Sandbox Code Playgroud)

但现在一切都是空的.

Joe*_*Joe 5

SAS日期始终为数字(自1960年1月1日以来的天数).日期格式只是使数字可读的一种方式.INTNX返回一个数字,因为这是一个日期是; 您可以将日期格式应用于新变量.

在你的情况下,它很简单.你几乎在你的尝试中做到了,但你不需要输入/投入业务.

data giant;
  set giant;
  upper_bound=intnx('week',Date1,2);
  format upper_bound MMDDYY10.;
run;
Run Code Online (Sandbox Code Playgroud)

INPUT将人类可读文本转换为值(通常是数字).PUT将值转换为人类可读文本. PUT(INPUT(...))通常用于将格式化的值转换为不同类型的格式化值(例如,将字符串"1/1/1960"转换为"01JAN1960"); INPUT(PUT(...))除非您正在解析PUT创建的字符串(例如,只读取特定日期元素或类似的东西),否则不常用.在大多数情况下,两者都会更改类型(从PUT中的数字到字符或INPUT中的其他方式),并且肯定会更改实际存储的值.

将格式应用于数字列会使列成为数字(通常很好)但告诉SAS如何显示该数字以便您可以理解它(通常也很好).所以在价值下方,19857但显示的是05/14/2014.