【问题标题】:Convert SAS DATE and use in a PROC SQL转换 SAS DATE 并在 PROC SQL 中使用
【发布时间】:2019-01-29 03:59:57
【问题描述】:

我在 SAS Enterprise Guide 7.1 M4 中的日期有问题。

在 SQL Server 或 VBA 中非常简单,但在 SAS 中让我发疯。

问题: 出于某种奇怪的原因,我无法做出简单的选择。我尝试了许多不同形式的格式化和转换,但似乎都有效 我的简单选择不返回任何观察结果。

T1.DT_DATE在proc内容中的描述 类型:数字 连:8 格式:DDMMYY10。 信息:DATETIME20。

%let DATE_EXAMPLE='01JAN2019'd;

data _null_;
      call symput ('CONVERTED_DATE',put(&DATE_EXAMPLE, ddmmyy10.));
run;

%put &CONVERTED_DATE;

PROC SQL;
    CREATE TABLE TEST_SELECT AS 
        SELECT * 
        FROM MY_SAMPLE_DATA as T1
        WHERE T1.DT_DATE = &CONVERTED_DATE
;QUIT;

【问题讨论】:

  • 谢谢@Kiran。它给了我解决问题的线索。
  • 我终于明白了。 SAS 日期内部是一个 5 长度的数字,正如您所说,数据文字是 SAS 通信的方式。 DDMMMYYYY'd or DATE9 但是主要情况还是靠这个“D”在最后一个位置,所以我想出了解决问题的方法 cat("'", put(DATE_EXAMPLE, date9.), "'d") 所以这适用于我的新变量,传递给 proc sql no print :)

标签: sas


【解决方案1】:

最初您正在正确设置日期,但您将其更改为在 where 子句中无法理解的不同值。查看您创建的两个宏变量的宏变量的分辨率

%put value of my earlier date value  is &DATE_EXAMPLE;
value of my earlier date value  is '01JAN2019'd
%put value of my current date value is &CONVERTED_DATE;
 value of my current date value is 01/01/2019

更改您的代码以使用“01JAN2019”的日期文字,然后您的代码将起作用。 01/01/2019 值在 where 子句中没有意义。

PROC SQL;
CREATE TABLE TEST_SELECT AS 
    SELECT * 
    FROM MY_SAMPLE_DATA as T1
    WHERE T1.DT_DATE = &CONVERTED_DATE
;QUIT;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多