SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2989|回复: 13
打印 上一主题 下一主题

在scl中用rsubmit不能得到obs

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-2-9 15:53:55 | 只看该作者

在scl中用rsubmit不能得到obs

用于scl中的程序不能得到obs,而program editor中运行的程序可以,WHY?

/*以下用于program editor中运行*/
rsubmit;
proc sql noprint;
   select count(1) into <!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->bs from sashelp.class where age=14;
quit;

%sysrput obs=&amp;obs;
endrsubmit;

%put &amp;obs;


/*以下建立一个scl文件*/
init:
   dcl num obs;

   submit continue;rsubmit;
   proc sql noprint;
      select count(1) into <!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->bs from sashelp.class where age=14;
   quit;

   %sysrput obs=&amp;obs;
   endrsubmit;endsubmit;

   obs=symgetn('obs');
   put obs=;
return;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-2-10 09:44:03 | 只看该作者
你是要从表中把obs的数取出来呀?我觉得应该这样做,你试试:

init:
dcl num obs;

submit continue;
proc sql noprint;
select count(1) into <!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->bs from sashelp.class where age=14;
quit;

endsubmit;

obs=symgetn('obs');
put obs=;
return;

我的程序记录数据集的记录数的程序是这样的,你参考一下
submit continue;
proc sql;                                                                                                                                                                                                                                                      
      select count(*) into :nrecord                                                                                                                                                                                                                             
      from tmp1;                                                                                                                                                                                                                                                
quit;
endsubmit;                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                               
nrecord=symgetn('nrecord');
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-2-10 09:47:05 | 只看该作者
你以后要注意了,在edit中能运行的程序,在SCL中不一定能成功。需要改动一下的,我以前也遇到过这种情况,好像是运用宏语言是也有不同,具体的我忘了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-2-10 10:06:11 | 只看该作者
同意apan的意见,但是我觉得问题可能出在rsubmit上。
你试试先把obs写成表,再读它。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-2-10 12:31:18 | 只看该作者
server端的表,非local,如果本地,我也犯不着再多用一个macro变量了.
注意:我用的是rsubmit.

当然,如果使用call symput(),仍然会有以上同样的问题:
init:
   dcl num obs;

   submit continue;rsubmit;   
   data _null_;
   p=0;
   set lib.dataset point=p nobs=n;  
   call symput('obs',n);
   stop;
   run;
   
   %sysrput obs=&amp;obs;
   endrsubmit;endsubmit;
   
   obs=symgetn('obs');
   put obs=;
return;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-2-10 12:35:40 | 只看该作者
可以解决的办法是
%let dsid=%sysfunc(open(lib.dataset));
%sysrput nobs=%sysfunc(attrn(&amp;dsid,nobs));
%let rc=%sysfunc(close(&amp;dsid));

然后在本地用symgetn读出.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-2-10 12:53:27 | 只看该作者
shiyiming,为什么他的程序里要加rsubmit?又不是远程调用。
%sysrput obs=&amp;obs;这句话又是什么意思?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2004-2-10 13:37:39 | 只看该作者
apan不会吧?怎么来问我,不问本人呢?
rsubmit就是把语句递交到远程的SAS(一般服务器的配置都比较强劲),这样就不会耗费本地的内存和CPU资源,他只要截获远程执行的结果在本地显示就行了。
%sysrput是将远程的变量赋给本地宏,HELP里写的很明白。真是懒!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2004-2-11 09:33:11 | 只看该作者
<!-- s:P --><img src="{SMILIES_PATH}/icon_razz.gif" alt=":P" title="Razz" /><!-- s:P -->  <!-- s:oops: --><img src="{SMILIES_PATH}/icon_redface.gif" alt=":oops:" title="Embarassed" /><!-- s:oops: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2004-2-12 09:34:25 | 只看该作者
一般这些问题都是sas的bug,或者还有很多深奥的东西我还不理解。

我这些日子每天就是忙着给sas公司报bug了,真是搞笑!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-8 15:21 , Processed in 0.108284 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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