我正在尝试使用 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”,但出现语法错误,并且程序根本不运行。
您使用什么客户端? (显示管理器、企业指南、SAS Studio、VA 等)以及您的 SAS 代码在哪种机器上运行? (本地或远程Window/Linux)
有些可能性:
libref
amlgroup
可能指向其他用户可以访问的库(文件夹)(例如,如果您在 SAS 服务器上运行代码),并且他们可能对数据集有锁定。使用%PUT &=SYSPROCESSID;
查看您的会话进程ID是否与ERROR消息中的相同。
您可以在数据查看器中打开数据集。