【问题标题】:Getting only the newest data from a table in SAS EG in an efficient way以高效的方式仅从 SAS EG 中的表中获取最新数据
【发布时间】:2022-11-24 17:44:00
【问题描述】:

我有一个不定期更新的表格;我需要始终从表中检索最新的数据集。

如果列 PERIODAG_D(时间戳变量)接近当前日期,我将知道数据是最新的。

我当前的解决方案是将 outobs=1 设置为仅通过 PER_DAG_I (数字日期变量)降序获得一次观察和排序:

PROC SQL OUTOBS=1;
   CREATE TABLE DESC_SORT AS 
   SELECT DISTINCT t3.PER_DAG_I, 
          t3.PERIODAG_D
      FROM COREPLNZ.KXYZ1000FCT t1
           LEFT JOIN COREPLNZ.KXYZ0090_SKEMA_JUNK t2 ON (t1.SKEMA_XYZ_JUNK_I = t2.SKEMA_XYZ_JUNK_I)
           LEFT JOIN COREPLNZ.TXYZ0200_KILDEFACT_DIM t4 ON (t1.KILDEFACT_I = t4.KILDEFACT_I)
           LEFT JOIN COREPLNZ.TKON0010PER_DAG_DIM t3 ON (t1.OPGOR_DAG_I = t3.PER_DAG_I)
      WHERE t4.KILDEFACT_NAVN = 'TLIK6000_RESTLOEBETID_FCT' AND t2.SKEMA_KODE = 'C 73.00'
      ORDER BY t3.PER_DAG_I DESC;
QUIT;

这给了我以下输出:

然后我将 PERIODAG_D 和 PER_DAG_I 添加到宏变量中,我可以在我的 WHERE 语句中使用它来获取表中的最新数据。

我的问题是,这感觉像是一个非常低效的解决方法,只获取一个日期变量。

我希望你能指出我正确的方向。

【问题讨论】:

  • 你能告诉我们你的整个代码吗?这是您实际提取数据的代码吗?

标签: sql sas enterprise-guide


【解决方案1】:

您可以在 proc sql 语句中使用 into 将结果保存到宏变量:-

PROC SQL NOPRINT;
SELECT MAX(my_date)
INTO :my_date_variable
FROM (sql_statement_returning_mydates);
QUIT;

%PUT &my_date_variable;检查宏变量

然后在你的语句中使用宏变量。

WHERE date_column = '&my_date_variable'd

附件很有用:-

Using the Magical Keyword 'INTO:' in PROC SQL

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多