【问题标题】:How to add Date column in using SAS' proc sql?如何在使用 SAS 的 proc sql 时添加日期列?
【发布时间】:2021-12-30 07:57:34
【问题描述】:

我正在尝试将今天的日期列添加到我现有的数据集中。我正在使用上一个问题中提供的方法。我的代码如下:

proc sql;
    alter table data1 add today_date char label= "Today's Date" format = $8.;
    update data1 set today_date= today();
quit;

但是,我收到以下错误:

327  proc sql;
328      alter table data1 add today_date char label= "Today's Date" format = $8.;
NOTE: Table DATA1 has been modified, with 11 columns.
329      update data1 set today_date= today();
ERROR: today_date, a character column, can only be updated with a character expression.
330  quit;

这样做的目的是计算数据集中存在的已开立账户的天数。根据我的理解,任期可以使用今天的日期和开户时间之间的差异来计算。

谢谢

【问题讨论】:

  • 如果您希望 TODAY_DATE 包含 DATE 值,为什么要将其定义为字符变量? SAS 将 DATE 值存储为数字。

标签: sql sas


【解决方案1】:

关于

我正在尝试将今天的日期列添加到我现有的数据集中。

数据集的每个单元格(行和列的交叉点)都有一个固定值。今天的日期值明天是昨天的日期值。

具有动态值的数据结构称为视图,其中的某些列可能是计算的结果。

你可以考虑

* Create view once, use tomorrow! ;
proc sql;
    create VIEW data1_v as
    select 
      *
    , today() as today_date format=date9. label= "Today's Date"
    from
      data1
    ;

您可能还想详细了解 SAS 日期值和 SAS 日期格式的性质。

  • SAS 日期值 - 数字,自 01JAN1960 以来的天数
  • SAS 日期格式 - 如何为人类呈现日期值(作为字形序列)。
  • SAS 日期信息 - 如何解释字形并将其转换为日期值

您还可以通过简单地使用 today() 函数来引用今天的计算日期,而不是依赖数据源中预先组合或预先计算的列。

【讨论】:

  • 你好。因此,如果今天的日期不断变化,那很好。此外,鉴于提供的解决方案,我收到以下错误:错误:无法创建 DATA1.VIEW,因为 DATA1.DATA 已经存在。错误:由于错误未定义 SQL 视图。
  • @DinaDina 您需要为视图指定一个不同的名称,而不是相同的名称。在示例代码中,它不再是 data1_v 而不是 data1 作为视图名称。
  • 这似乎有效。另一个问题。我表中的另一列的日期格式为 14415。今天的日期列的日期格式为 30DEC2021。在给定不同格式的情况下,我能否计算出两个日期之间的天数差?
【解决方案2】:

我怀疑问题在于您的 Today's Date 字段格式错误,而不是日期。试试下面的代码:

proc sql;
    alter table data1 
    add todays_date date;
    update data1  
    set todays_date = today();
quit;

【讨论】:

  • 请注意,问题不是附加到变量的格式。在 SAS 中,格式只是有关如何将值显示为文本的说明。变量的类型决定了它可以保存什么值。日期值是数字,因此需要将变量定义为数字而不是字符。
  • 技术上 SAS 没有 date 类型,但它会正确地将字段添加为具有日期格式的数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
相关资源
最近更新 更多