用proc sql更新

时间:2014-07-08 10:44:59

标签: sql sas

它应该是一个简单的,但我被卡住了

Proc sql; 

UPDATE dicofr 
SET    dicofr.period = correspondance.period 
FROM   dicofr 
INNER JOIN correspondance 
ON dicofr.name_fic = correspondance.name_fic; 

我在想我的更新会完成,但我收到了这个错误。

271  proc sql;
272  update dicofr
273  set dicofr.period = correspondance.period
           -
           73
           76
ERROR 73-322: Expecting an =.

ERROR 76-322: Syntax error, statement will be ignored.

我尝试使用select

进行直接加入
proc sql;
SELECT * FROM dicofr INNER JOIN correspondance 
ON dicofr.nom_fic=correspondance.nom_fic;

选择很好。

为什么?

我的SQL查询不正确吗?我不这么认为......

已修改:似乎无法进行我想要的更新。有没有办法用SAS语言做我想做的事情?

2 个答案:

答案 0 :(得分:10)

由于某种原因,SAS不支持UPDATE语句中的JOIN。您需要通过嵌套选择来完成。

proc sql;
update tableA A
set var=
  (select var 
  from tableB B 
  where B.id=A.id)
where exists (
  select 1 
  from tableB B
  where B.id=A.id);
quit;

答案 1 :(得分:0)

是的,你采取了错误的做法。尝试这样的事情: -

UPDATE dicofr INNER JOIN correspondance 
ON dicofr.name_fic = correspondance.name_fic; 
SET dicofr.period = correspondance.period 
WHERE cond....