【问题标题】:How does SELECT INTO works with SASSELECT INTO 如何与 SAS 配合使用
【发布时间】:2026-01-11 16:45:02
【问题描述】:

我是 SAS 新手,我尝试将我的代码从 Access vba 复制到 SAS。 在 Access 中,我经常使用 SELECT INTO 函数,但在我看来,SAS 中没有这个函数。

我有两张表,每天都有新数据,我想用新行更新我的表。现在我需要检查是否出现了一些新行 -> 如果是,则将此行插入旧表中。

我尝试了一些来自 * 的代码和来自 Google 的其他东西,但我没有找到有用的东西。

INSERT INTO OLD_TABLE T
VALUES (GRVID = VTGONR)
FROM NEW_TABLE V
WHERE not exists (SELECT V.VTGONR FROM NEW_TABLE V WHERE T.GRVID = V.VTGONR);

【问题讨论】:

    标签: select sas


    【解决方案1】:

    不确定在您的示例中使用 VALUES 关键字的目的是什么。 PROC SQL 使用 VALUES() 列出静态值。喜欢:

    VALUES (100)
    

    SAS 只是使用普通的 SQL 语法。例如:https://www.techonthenet.com/sql/insert.php

    要指定要插入的观察,只需使用 SELECT。您可以添加 WHERE 子句作为选择的一部分,以限制您选择插入的行。告诉 INSERT 要插入哪些列,在表名后面的 () 中列出它们。否则,它将期望在 select 语句中列出的列的顺序与目标表中列的顺序相匹配。

    insert into old_table(GRVID)
      select VTGONR from new_table
      where VTGONR  not in (select GRVID from old_table)
    ;
    

    【讨论】:

    • 好的,谢谢,但现在我收到一个大错误:错误:您无法使用成员级别控制重新打开 old_table.DATA 以进行更新访问,因为您在资源环境 SQL 中正在使用 old_table.DATA ( 2)。错误:如果发生错误,PROC SQL 无法撤消此语句,因为它无法获得对数据集的独占访问权限。此语句不会执行,因为 SQL 选项 UNDO_POLICY=REQUIRED 有效。
    • 通常我会分两步执行这样的操作。使用要插入的数据创建一个表。然后插入数据。