背景
我有一个脚本,每个月运行一次,以创建供团队使用的数据集。该脚本在我的个人UNIX目录中生成数据集,然后运行健全性检查并将数据集复制到我的团队可以访问它的“公共”目录中。该脚本很稳定,因此不再需要运行健全性检查。
我想做什么
问题声明
尝试更改数据集名称时出现以下错误
错误:您无法将COSTDATA.EMPL_CHAIN.DATA重命名为COSTDATA.EMPL_CHAIN_19SEP18.DATA,因为您在资源环境IOM ROOT COMP ENV中使用了COSTDATA.EMPL_CHAIN.DATA。
已使用代码
%let dsid2=%sysfunc(open(costdata.empl_chain));
%put ********&dsid2;
%let modte2=%sysfunc(attrn(&dsid2,modte),datetime7.);
%put &modte2;
%let rc=%sysfunc(close(&dsid2));
%put RC Value is &rc;
proc datasets library=costdata;
change empl_chain=empl_chain_&modte2;
run;
SAS日志
29 %let dsid2=%sysfunc(open(costdata.empl_chain));
30 %put ********&dsid2;
********2
31 %let modte2=%sysfunc(attrn(&dsid2,modte),datetime7.);
32 %put &modte2;
19SEP18
33 %let rc=%sysfunc(close(&dsid2));
34 %put RC Value is &rc;
RC Value is 0
35
36 proc datasets library=costdata;
37 change empl_chain=empl_chain_&modte2;
38 run;
NOTE: Changing the name COSTDATA.EMPL_CHAIN to COSTDATA.EMPL_CHAIN_19SEP18 (memtype=DATA).
ERROR: You cannot rename COSTDATA.EMPL_CHAIN.DATA to COSTDATA.EMPL_CHAIN_19SEP18.DATA because COSTDATA.EMPL_CHAIN.DATA is in use by you in resource environment IOM ROOT COMP ENV.
39
其他有用信息:
我正在尝试对多个数据集执行类似的操作。如果SAS EG会话是新的,则重命名片段可对第一个数据集正常工作。可以预见的是,第二个数据集以后将失败。在EG中,根据SAS的建议,未选中“工具”>“选项”>“数据”>“数据常规” ...中的“添加到项目时自动打开数据”复选框。
我还知道其他一些简单的技巧,例如在新数据步骤中声明具有正确名称的新数据集或在proc数据集中使用“ exchange”功能。但是,我想知道上述错误是否有解决方案。
答案 0 :(得分:0)
包括:
LOCK
名成员open
函数第二次%sysfunc(open
尝试和%sysfunc(sysmsg())
返回的dsid是多少?
您能不能进入Unix主机并向list lockers发出命令?诸如flock
lslock
,lslk
,lsof
答案 1 :(得分:0)
另一种方法是通过另一种方式获取修改日期。
%let dset = CLASS;
proc sql noprint;
select put(datepart(modate), yymmddn8.) into :modte
from sashelp.vtable
where libname='WORK' and memname="&dset.";
quit;
%put &modte.;
proc datasets library=work;
change &dset. = &dset._&modte.;
run;
答案 2 :(得分:0)
好吧,我迷路了。从EG 7.15到Linux上的SAS 9.4M4会话,您的代码对我来说运行良好。下面是使用WORK库的示例。您能否使用它查看是否在您的环境中重现了该问题,如果不能,那么您是否可以发布使用从SASHELP数据集创建的数据来重现该问题的完整代码?
在您共享的日志中,看起来所有返回代码都不错,因此SAS代码不应锁定文件。一旦有了可复制的示例,也许可以尝试在服务器上批量提交它(假设您可以通过ssh进行访问),以查看EG是否以某种方式引起了锁定。
data class ;
set sashelp.class ;
run ;
data shoes ;
set sashelp.shoes ;
run ;
%let dsid2=%sysfunc(open(work.class));
%put ********&dsid2;
%let modte2=%sysfunc(attrn(&dsid2,modte),datetime7.);
%put &modte2;
%let rc=%sysfunc(close(&dsid2));
%put RC Value is &rc;
proc datasets library=work;
change class=class_&modte2;
run;
%let dsid2=%sysfunc(open(work.shoes));
%put ********&dsid2;
%let modte2=%sysfunc(attrn(&dsid2,modte),datetime7.);
%put &modte2;
%let rc=%sysfunc(close(&dsid2));
%put RC Value is &rc;
proc datasets library=work;
change shoes=shoes_&modte2;
run;