SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3004|回复: 2
打印 上一主题 下一主题

求助:open() 和 close() 函数!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2003-12-3 17:38:20 | 只看该作者

求助:open() 和 close() 函数!

各位大侠,我编了下面这段程序,想计算数据库的记录数,当第一次运行时,结果是对的,当第二次运行时,出现错误提示,不知怎么回事了?谢谢!!!


data class;
set sashelp.class;
run;

%let data=class;
%let dsid=%sysfunc(open(&data,i));
%let nobs=%sysfunc(attrn(&dsid,NOBS));
%let rc=close(dsid);

[color=red:9088d]ERROR: You cannot open WORK.CLASS.DATA for output access with member-level control because WORK.CLASS.DATA is in use by you in resource environment DMS Process.
NOTE: The SAS System stopped processing this step because of errors.[/color:9088d]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-12-3 21:01:32 | 只看该作者
原因在于你没有关闭打开的数据集work.class,虽然程序中包含一个close函数。程序第一次运行时将数据集打开了而没有正常关闭,第二次要再打开并进行修改当然会出错。

在此程序中,close函数也必须按照前面的语句格式来书写,即也必须通过调用%sysfunc函数来执行,否则close函数无效。

程序应修改为如下的形式,就不会出错了。

data class;
set sashelp.class;
run;

%let data=class;
%let dsid=%sysfunc(open(&data,i));
%let nobs=%sysfunc(attrn(&dsid,NOBS));
%let rc=%sysfunc(close(&dsid));
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-12-4 10:33:37 | 只看该作者
多谢同学指点,问题搞定!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-5 18:54 , Processed in 0.113288 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表