全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4412 3
2017-01-25
工作用的sas需要大量循环计算,频繁读写数据集。硬盘的响应速度影响很大,有没有办法将数据集放入内存中使用?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-1-28 20:30:00
可以用内存库实现

/*方案A:建立两个库,一个在内存,一个在硬盘*/
libname inmemory "g:\memlib" memlib;
libname ondisk "g:\disk”";

/* 将硬盘库的文件复制到内存库中   */
proc copy in=ondisk out=inmemory;
        run;

/* 使用上和其他逻辑库完全一样,但速度就飞起来了。
记得内存库的结果算好之后,要copy回到硬盘 */
data ds_res;
        set inmemory.dataset1 - dataset5;
        ...;
        ...;
        run;

/*方案B:不建内存库,将内存区设为文件缓存 */
/* 直接打开那些大文件 */
data _null_; set bigdataset1;run;
data _null_; set bigdataset2;run;
data _null_; set bigdataset3;run;
data _null_; set bigdataset4;run;
data _null_; set bigdataset5;run;

/* 将MEMCACHE设为1:将当前已经存在的文件保留在内存中 */
options memcache = 1;

/* 做点计算,也可以体验飞起来的感觉 */
data res; set bigdataset;...;...;run;

/* 内存快爆,不能再开新的文件,把内存缓存的入口关掉*/
options memchache=0;

总结一下:
1、方案A比较正式(麻烦)、方案B更简单(随意);
2、可以用OPTIONS的里面有个参数,-MEMSIZE n  | nK  | nM  | nG  | nT  | hexX  | MAX; 可以来允许最大可用内存,经验看,不要超过电脑内存的50%;
3、如果从来没听说过上述两个,那你还需要设定当前用户可以锁定内存页。操作路径:控制面板-管理工具-本地安全策略-左边树形菜单-本地策略-用户权限分配-右侧列表-锁定内存页-打开-添加用户或组-高级-立即查找-选中自己的账户-确定-确定,完成。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-1-30 10:56:47
厉害!学习了!!!!!!!!!!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-2-28 12:28:16
太棒了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群