SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1769|回复: 7
打印 上一主题 下一主题

请教open() function

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-9-16 02:07:28 | 只看该作者

请教open() function

data b;
input x1 y;
cards;
1 20
2 50
;
run;
%macro aaa;
%let dsid=%sysfunc(open(b));
%if %sysfunc(varnum(&dsid.,x))^=0 %then %do;
data c;set b;
xy=x;
run;
%end;
%else %do;
data c;set b;
xy=y;
run;
%end;
%mend;
%aaa

如例所示,运行之后,便无法删除data b. log提示data b在使用中,这是怎么回事?
如果是open的原因,请问,在使用open的前提下,我该如何关闭,或如何去除这个情形(不能自由的建立或删除一个dataset)?
thanks a lot!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-9-16 03:51:18 | 只看该作者

Re: 请教open() function

you have to close the dataset somewhere before the %mend;

        %let dsid=sysfunc(close(&dsid));
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-9-16 22:04:56 | 只看该作者

Re: 请教open() function

I tried, but failed for %let dsid=%sysfunc(close(&dsid));  .
even I tried  %let dsid=%sysfunc(close(b));, but still wrong;
could anyone give me a suggestion, thanks a lot.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-9-17 09:18:01 | 只看该作者

Re: 请教open() function

Close your SAS, re-start it. open funcion and colse funcion must be used in pair.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-9-18 03:03:23 | 只看该作者

Re: 请教open() function

yes, I tried again according what you suggested, cloase SAS and reopen it(repeat it hundreds times). then, run the code besides the line :
data b;
input x1 y;
cards;
1 20
2 50
;
run;
%macro aaa;
%let dsid=%sysfunc(open(b));
%if %sysfunc(varnum(&dsid.,x))^=0 %then %do;
data c;set b;
xy=x;
run;
%end;
%else %do;
data c;set b;
xy=y;
run;
%end;

%let dsid=%sysfunc(close(&dsid));
/*
%let dsid=sysfunc(close(&dsid)); or
%let dsid=%sysfunc(close(&dsid)); or
%let rc=%sysfunc(close(&dsid));
*/

%mend;
%aaa

however, nothing changed, and the problem still there.(BTW, what is your SAS? 9.1 or 9.2? Mine is 9.1.)
can anyone help? Thanks.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-9-18 04:01:52 | 只看该作者

Re: 请教open() function

i restarted my PC&SAS and run the code, everything looks normal now, thanks a lot!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-9-19 23:34:35 | 只看该作者

Re: 请教open() function

其实跟你用察看器打开数据集道理一样的,你要关上才行。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-9-21 23:00:53 | 只看该作者

Re: 请教open() function

the correct way is to close the dataset before your next step to open it.
%macro aaa;
%let dsid=%sysfunc(open(b));
%if %sysfunc(varnum(&dsid.,x))^=0 %then %do;
%let dsid=%sysfunc(close(&dsid));
data c;set b;
xy=x;
run;
%end;
%else %do;
%let dsid=%sysfunc(close(&dsid));
data c;set b;
xy=y;
run;
%end;

%mend;
%aaa
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-7 22:10 , Processed in 0.070547 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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