本站分享大数据、数据分析、数据挖掘、数据库、商业智能(BI)、数据分析师、培训课程考试认证等相关信息!【广告合作】在线联系联系我们数据分析QQ交流群:331864445

提高sas处理大数据工作效率有技巧

sas培训 cdadata 295℃ 0评论

提高sas处理大数据工作效率有技巧

1.测试代码的时候,可以从大数据集中抽取一部分数据来进行测试,而不比直接在大文件上全部进行测试。抽取数据这个有好多种方法常用的如使用obs=option选项,proc surveyselect进行分层抽样,利用种子产生随机数来抽取等等,反正怎么方便怎么取。如

  1. proc means data=test(obs=1000);
  2. run;

复制代码

或者

  1. options obs=1000;
  2. proc means data=test;
  3. run;
  4. options obs=max;

复制代码

2.每个数据集最好只保留自己想要的变量,变量太多是会影响效率的,所以无关变量可以drop掉,或者keep想要的变量。

3.在对符合已知变量条件的记录进行处理时,果断先进行筛选,然后在进行处理。同时在 Data步建立新数据集,在进行的条件筛选中,where的效率比if高,因为where在读入的时候就已经进行判断,而if则是等到全部读完的时候才进行判断。如需对class数据集中的男生建立一个新变量weight_new,以下这种写法是不可取的。

  1. data test;
  2.             set sashelp.class;
  3.             weight_new=sum(height,-101);
  4.             if  sex=”男”;
  5.      run;

复制代码

可以这么写

  1. data test;
  2.             set sashelp.class(Where =(sex=”男”));
  3.             weight_new=sum(height,-101);
  4.      run;

复制代码

4.一些能省略的data步,如先经过data步进行简单的条件筛选,然后进行proc步的一些操作,诸如此类的data步,尽量省略吧。

  1. data test;
  2.                 set  sashelp.class;
  3.                 where  sex=”男”;
  4.      run;
  5.      proc means data=test;
  6.                 var  weight height;
  7.      run;

复制代码

完全可以这么写

  1. proc means data=test(where=(sex=”男”));
  2.                 var  weight  height;
  3.      run;

复制代码

5.需要修改数据集变量的label和format格式时,还是通过proc datasets过程进行修改效率比较快,它不需要记录进入pdv,比起data步更有效率。

  1. data test;
  2.      set sashelp.class;
  3.       label weight=”体重(斤)”;
  4.       format weight best6.2;
  5. run;
  6. proc datasets library=sashelp;
  7.      modify class;
  8.      label weight=”体重(斤)”;
  9.      format weight best6.2;
  10. run;
  11. quit;

复制代码

6.纵向合并数据集时,如果生成的目标表就是来源表之一,那么proc append会比data步更有效率。

 

  1. data test1;
  2.        do  i=1 to 10000000;
  3.               x=1;y=1;z=1;
  4.        output;
  5.        end;
  6. run;
  7. data test2;
  8.        do  i=1 to 10000000;
  9.             x=1;y=1;z=1;
  10.             output;
  11.     end;
  12. run;
  13.    data test1;
  14.           set test1 test2;
  15.     run;
  16. /*proc append*/
  17.     data test1;
  18.           set test1;
  19.           stop;
  20.     run;
  21.     proc append base=test1 data=test2;
  22.     run;
  23. /*proc datasets中的append*/
  24.     data test1;
  25.           set test1;
  26.           stop;
  27.     run;
  28. proc datasets library=work;
  29. modify test;
  30. append base=test1data=test2;
  31. run;
  32. quit;

复制代码

proc append和proc datasets中的append过程效率是一样的。

7.对于大数据集,一般都会讲数据集压缩,以节省存储空间,sas里可以通过options compress=yes;来进行压缩。

8.如果我们想要查看一个变量顶部5%的记录,可以通过proc rank一步实现,而不需先通过univariate过程先将p95分位数求出,然后赋值给宏变量,最后再回到数据集中筛选。

  1. data test;
  2.         do   i=1 to 200;
  3.             output;
  4.         end;
  5.     run;
  6.     proc rank data=test groups=100 out=want(where=(i_pct>=95));
  7.           var    i;
  8.           ranks   i_pct;
  9.     run;

复制代码

9.在编写一些proc步时,对于分组变量最好是用class而不用by,因为用by是得对分组变量进行排序的。

10.视图的应用。视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。所以视图能够节省大量的空间,同时因为它不是以存储的形式存在,因此在一定程序上能够提高运行效率。如对生成的数据集进行means过程

  1. data test1/view=test1;
  2.         do i=1 to 30000000;
  3.               x=1;y=1;z=1;output;
  4.         end;
  5. run;
  6. proc means data=test1;
  7.         var   i;
  8. run;

复制代码

 

转载请注明:数据分析 » 提高sas处理大数据工作效率有技巧

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!