SAS中文论坛

标题: 多语句共享数据? [打印本页]

作者: shiyiming    时间: 2012-2-20 18:19
标题: 多语句共享数据?
我想了半天,对于处理中反复用到的数据,又不能在一个data,proc步内解决的问题,不管是temp array还是hash table,都得在每个步的时候导入数据,那么就会浪费大量时间,fetchobs和批量全局宏变量,效率又值得商榷~那么,还有什么好办法可以实现TDV和PDV/SDV的快速转换,数据共享查询么?请教各位大侠

要是计算机语言,直接映射结构,然后处理直接就可以针对映射的结构处理了啊~
作者: shiyiming    时间: 2012-2-22 01:09
标题: Re: 多语句共享数据?
似乎只能sasfile open或者memlib了,我有时候使用IML的submit+memlib.
如果还不行,或许,你可以写一个动态库?不过我感觉这个的意义不大。
作者: shiyiming    时间: 2012-2-22 19:49
标题: Re: 多语句共享数据?
[quote="jeozu":x578ij2d]似乎只能sasfile open或者memlib了,我有时候使用IML的submit+memlib.
如果还不行,或许,你可以写一个动态库?不过我感觉这个的意义不大。[/quote:x578ij2d]


动态库调用试过,效果相当一般。
作者: shiyiming    时间: 2012-2-22 20:04
标题: Re: 多语句共享数据?
这两天不是一直走这个脑子么,然后居然发现了这个情况~虽然凭借经验我能猜出个大概,提前预分配内存,方便PDV,TDV调整,但是谁能给个准信儿啊~
另外linux系统的也看看是不是效率有差别呢~感谢!

我觉得这将近20倍的效率差别相当值得讨论一下的~
如果用memlib的话就是20倍的效率差别,如果用work而work本身映射硬盘直接,会看出来length的效率慢一倍,但是木length的并不会也变慢,这个应该是证明了之前PDV,TDV的假设?

[code:35uax6u6]data a;
do i=1 to 1000000;
output;
end;
run;
data mydata(drop=rc dsid);
length i 8;
   dsid=open("work.a","i");
   call set (dsid);
   do j=1 to 1000000;
      cc=abs(floor(rannor(1234)*100000));
      rc=fetchobs(dsid,cc);
      output;
   end;
run;
data mydata(drop=rc dsid);
   dsid=open("work.a","i");
   call set (dsid);
   do j=1 to 1000000;
      cc=abs(floor(rannor(1234)*100000));
      rc=fetchobs(dsid,cc);
      output;
   end;
run;[/code:35uax6u6]

另外还有木有更快的方法?




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2