在 SAS 中使用 Proc SQL Update 可能会出现死锁

问题描述 投票:0回答:1

我正在尝试使用 prog sql update 根据不同数据集中的多个条件来更新数据集中的变量“clnwash”。我是 SAS 新手,我很难让以下代码完成运行:

data amlgroup.amlgroup_7;
set amlgroup.amlgroup_6;
clnwash = 1;
run;

proc sql;
update amlgroup.amlgroup_7 as a
set clnwash = 0
where exists
(select * from amlgroup.amlgroup_2 as b
    where a.patid = b.patid and b.fill_dt >= a.washout and b.fill_dt <= a.out1end_dt);
quit;

数据步骤运行得很好。当程序到达 proc sql 步骤时,程序就会结束,这就是为什么我认为我造成了死锁。任何对此的想法表示赞赏。

当我运行原始代码时,程序永远不会完成,甚至几天后也是如此。我尝试将数据步骤和 proc sql 步骤分离到单独的程序中;当我单独提交 proc sql 步骤时,要么程序永远不会结束,要么我得到

ERROR: A lock is not available for <dataset> ERROR: Lock held by process 137726 

尝试纠正该问题,我尝试在“where contains”语句之后包含“waitfordelay”00:00:07”,但出现语法错误,并且程序根本不运行。

sql error-handling sas sql-update deadlock
1个回答
0
投票

您使用什么客户端? (显示管理器、企业指南、SAS Studio、VA 等)以及您的 SAS 代码在哪种机器上运行? (本地或远程Window/Linux)

有些可能性:

  • libref

    amlgroup
    可能指向其他用户可以访问的库(文件夹)(例如,如果您在 SAS 服务器上运行代码),并且他们可能对数据集有锁定。使用
    %PUT &=SYSPROCESSID;
    查看您的会话进程ID是否与ERROR消息中的相同。

    • 如果进程 ID 不匹配,请使用操作系统工具查看有问题的进程 ID 的命令行是什么。
  • 您可以在数据查看器中打开数据集。

© www.soinside.com 2019 - 2024. All rights reserved.