【问题标题】:Sql to proc sql conversionsql到proc sql转换
【发布时间】:2019-03-14 11:28:27
【问题描述】:

我有 2 个包含 var 值的表,例如 (ID, date, var1,var2,var3....)

我需要从 table2 中获取数据并将其添加到 table1 中,其中(ID 或日期)在 table1 中不存在。

我在 sql 中使用下面的代码来获取从 tab2 到 tab1 的新 ID:

INSERT INTO table1
SELECT * FROM table2 a
WHERE ID not in(select ID from table1 where ID=a.ID)

以下是将 tab2 中现有 ID 的新日期添加到 tab1 的代码:

INSERT INTO table1
    SELECT * FROM table2 a
    WHERE date not in(select date from table1 where ID=a.ID)

我不知道如何在 proc sql 中执行此操作。 请分享一个有效的方法来完成这项任务。

插入我使用的新 ID:

proc sql;
create table lookup as
select a.ID
from table1 a inner join table2 b
  on a.ID = b.ID
;
insert into table1 
select * from table2 a
where a.ID not in (select ID from lookup)
;
quit;

这很好用。但是,它未能为现有 ID 插入日期。 请提出一些想法来完成此步骤。 提前致谢!

【问题讨论】:

  • 我有点迷茫,前两条 SQL 工作正常吗?如果是,那么您可以将它们放在proc sql;quit; 之间,并以分号结尾。
  • “where a.IDnot in (select IDfrom lookup)”中有错别字(缺少空格)

标签: sas proc-sql


【解决方案1】:

SAS SQL 与您编写的 SQl 类似。

SAME insert 语句可以在 SAS 中被扭曲为 proc sqls,它们的工作方式非常有魅力。

如果您的 SQL 确实有效,那么以下内容也将有效。

PROC SQL;
    INSERT INTO work.table1
    SELECT * FROM work.table2 a
    WHERE ID not in(select ID from work.table1 where ID=a.ID);

    INSERT INTO work.table1
    SELECT * FROM work.table2 a
    WHERE date not in(select date from work.table1 where ID=a.ID)
QUIT;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多