Sas 基于两个表中的匹配更新变量

Sas 基于两个表中的匹配更新变量,sas,Sas,我有两个表,让我们把它们命名为table1和table2。它们都有credit\u id、loan\u id和Date字段。出于某些原因,需要使用表2中的相应值更新credit_id字段,按日期和loan_id字段链接数据。为此,我进行了如下查询: proc sql; UPDATE a SET a.credit_id = b.credit_id FROM table1 a, table2 b WHERE (a.Date = b.Date) AND (a.loan_

我有两个表,让我们把它们命名为table1和table2。它们都有credit\u id、loan\u id和Date字段。出于某些原因,需要使用表2中的相应值更新credit_id字段,按日期和loan_id字段链接数据。为此,我进行了如下查询:

proc sql;
    UPDATE a
    SET a.credit_id = b.credit_id
    FROM table1 a, table2 b
    WHERE (a.Date = b.Date) AND (a.loan_id = b.loan_id);
quit;
根据谷歌的说法,这个查询应该可以在许多sql环境中工作,但SAS在这里似乎是个例外,因为它似乎忽略了from部分


那么如何更新所需字段?

我不能对SQL进行评论,但您可以使用数据步骤执行相同的操作:

data table1;
  update table1 table2(keep = date loan_id credit_id);
  by date loan_id;
run;
这要求:

同一表格中没有两行具有相同的日期和贷款id,并且 这两个表都按日期和贷款id排序/索引
您需要保留事务数据集,以防止它更新/创建主数据集上的任何其他变量。还有其他几种方法可以做到这一点,例如使用modify或merge语句。

我不熟悉SAS,但您是否尝试过子查询来实现您的目标?更新Table1 Set Credit\u ID=从Table2中选择Credit\u ID,其中Table2.Loan\u ID=Table1.Loan\u ID您所说的子查询是什么意思?请参阅我上面编辑的回答。您好,更新和修改之间有什么区别?我建议您通过SAS在线文档进行一些基础研究,如果您仍然不理解,请在此处提问。