去年,我与一家公司进行了短暂的咨询工作,该公司正在构建一个主要由基于Web的数据存储库驱动的分析应用程序。数据存储为SAS数据集的集合,“客户”可以通过上载SAS数据步骤和proc SQL脚本来将其作为子集。生成的数据随后可供下载。我的职责是指导团队使用SAS应对数据管理和分析挑战。
在安装和配置WPS之后,我的任务是开发解决方案,以解决我们早期面临的性能挑战。
针对此挑战的替代设计涉及WPS的proc R,其中可以利用将SAS数据集导出/导入到R数据帧以及从SAS / WPS脚本执行R代码的功能。进入R世界之后,识别稀疏列并创建一个删除这些列的新数据框的任务很简单。
首先包含/运行SAS autoexec文件。
![](https://img-blog.csdnimg.cn/20191018134622501.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-191.gif)
接下来定义一个简单的SAS宏“函数”,该函数将数据集名称作为参数并打印行和列的#。在测试SAS数据集上调用它。
![](https://img-blog.csdnimg.cn/20191018134638470.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-191.gif)
![](https://img-blog.csdnimg.cn/20191018134647397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-192.gif)
![](https://img-blog.csdnimg.cn/20191018134656853.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-200.gif)
将测试SAS数据集导出到R数据帧,确定哪些列为60%或更高notnull,将这些列组装到新数据帧中,然后将该数据帧导入SAS。注意注释的语句除了空值外还标识空白。264列中只有33列达到60%阈值。该单元的执行非常迅速。
![](https://img-blog.csdnimg.cn/20191018134742267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-196.gif)
![](https://img-blog.csdnimg.cn/20191018134751391.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-195.gif)
![](https://img-blog.csdnimg.cn/20191018134800692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-193.gif)
![](https://img-blog.csdnimg.cn/20191018134809980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-194.gif)
![](https://img-blog.csdnimg.cn/2019101813482075.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-197.gif)
![](https://img-blog.csdnimg.cn/20191018134831258.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-198.gif)
![](https://img-blog.csdnimg.cn/20191018134840980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-199.gif)
![](https://img-blog.csdnimg.cn/20191018134914268.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-206.gif)
![](https://img-blog.csdnimg.cn/20191018134922315.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-201.gif)
![](https://img-blog.csdnimg.cn/20191018134935222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-202.gif)
![](https://img-blog.csdnimg.cn/20191018135005298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-204.gif)
![](https://img-blog.csdnimg.cn/20191018135012649.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-203.gif)
![](https://img-blog.csdnimg.cn/2019101813502239.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-205.gif)
接下来,将SAS数据集导出到Python pandas,然后部署Python函数以确定每列中的%notnull并创建一个新的pandas数据框,其中只有%notnull超过.6的列。经过Python处理后,将pandas数据框导入SAS。与R一样 。这个单元比上一个单元耗费了一个数量级的时间。
![](https://img-blog.csdnimg.cn/2019101813520081.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-215.gif)
![](https://img-blog.csdnimg.cn/20191018135208596.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-208.gif)
![](https://img-blog.csdnimg.cn/20191018135215234.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-207.gif)
![](https://img-blog.csdnimg.cn/20191018135224711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-209.gif)
![](https://img-blog.csdnimg.cn/20191018135237110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-210.gif)
![](https://img-blog.csdnimg.cn/20191018135249406.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-211.gif)
![](https://img-blog.csdnimg.cn/20191018135301643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-212.gif)
![](https://img-blog.csdnimg.cn/20191018135316846.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjAwMjkx,size_16,color_FFFFFF,t_70)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-213.gif)
![](https://img-blog.csdnimg.cn/20191018135330130.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-216.gif)
![](https://img-blog.csdnimg.cn/20191018135338589.png)
![](https://tecdat.cn/wp-content/uploads/2019/10/image-214.gif)
尽管SAS仍然是一个主要的分析平台,并且不会很快消失,但它已为R和Python的分析工作所取代。对于SAS / WPS程序员而言,Python和R proc是Base SAS的非常有用的附件。确实,商业和开放源代码的竞争数据科学生态系统之间的互操作性将继续提高-这对数据科学世界来说无非是一件好事。目前,WPS的proc R比proc Python快很多,因此是协作SAS工作的选择。希望proc Python将很快成为高性能,使SAS数据程序员能够平等地访问前两个DS平台。
非常感谢您阅读本文,有任何问题请在下面留言!
1
1
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。