统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3504|回复: 0
打印 上一主题 下一主题

SAS编程应用高级技巧

[复制链接]
跳转到指定楼层
1
发表于 2011-6-18 18:46:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       如何从一批SCL,SOURCE文件中查找或替换某字符串
  你是否有这样的麻烦,你在好几个CATALOG下建了上百个SCL或SOURCE文件,突然有一天因为系统变化,必须改动程序,比如有某个特征被大量程序引用了,那你必须一个一个的打开SCL文件,然后查找,然后在替换,想必你在那时肯定痛恨SAS公司的破编辑器了,功能弱智的像微软的记事本一样,如果你不幸不知道这样的技巧,那只能老老实实一个一个的打开,查找,替换、编译、保存、另存,然后在打开另一个文件,如此周而复此
  呵,不过幸运的是你看到了这篇文章,从此就可以中气十足的对BOSS说,我绝对把那改动全部该过来了,没问题
  好了,不唠叨了,言归正传吧
  不知道你有没有用过大名鼎鼎的编辑器ULTRAEDIT呢,相信很多写CODE的人都在用它吧,确实很强的一个编辑器,今天我就用这编辑器中的一个小小功能,那就是查找、替换功能,它可是能在N多文件里做查找替换,我试了,打开上百个文件速度还是不错的,且操作非常方便
  好了,知道有这个功能就行了,下面的问题是怎么才能把SAS CATALOG里的程序文件导出来呢?且听我慢慢说来
  首先,我们知道,SAS提供了很多快捷的命令直接操作,比如
  在命令窗口敲入一个【open 表名】,就可以打开一个表,而不用用鼠标去找这个表名,然后双击
  要实现把CATALOG下的程序文件导出,导入我们必须知道这些命令,如下
  build scl文件 /*打开一个SCL文件*/
  clear /*清除当前窗口内容*/
  file “文件名”/*存盘当前窗口内容到文件*/
  include “文件名”/*把指定文件的内容导入当前窗口*/
  compile /*编译当前程序*/
  save/*存盘当前窗口内容*/
  saveclass/*存盘为类*/
  end/*关闭当前窗口*/
  cancel/*取消当前窗口所作的改动*/
  还必须知道这样一个SAS系统视图,里面存放的是SAS的一下文件信息,比如CATALOG下有哪些什么文件啊,是什么样的类型啊,如下
  系统视图sashelp.vcatalg
  主要字段:
  libname 库名,就是CATALOG的名字
  memname 目录名
  objtype 成员类型,比如SCL
  objname 对象名,就是CATALOG下的文件拉
  好了,知道这些就可以把你想要的文件导出来了,下面就是源代码了
  /*导出*/
  %let dir=g:\src\;/*要导出到哪个目录*/
  data _null_;
  set sashelp.vcatalg;
  where libname =”要导出那个库”and memname in (要导出哪些目录)and objtype=”要导出什么类型的文件,比如SCL”;
  length filename filename1 $200 str $2000;
  filename=compress(”&dir”|| memname || “\”|| objname || “.scl”);
  filename1=compress(libname ||”.”|| memname || “.”|| objname || “.scl”);
  str= “dm ”“”|| “build ”|| trim(filename1)|| “;file”|| “'”|| trim(filename)|| “'”|| ”;end;”|| “”“;”;
  put str;
  run;
  OK,现在运行上面的程序,会输出如下结果
  dm “build ***.scl;file'g:\src\***.scl';end;”;
  dm “build ***.scl;file'g:\src\***.scl';end;”;
  ....
  然后把输出结果拷贝出来,然后粘贴到命令窗口,运行,然后你就会看到窗口闪啊闪啊,如果文件很多的化会闪一会儿的,耐心一点
  运行完了把,然后去你导出的那个目录看吧,是不是生成了很多SCL文件
  咔咔,第一步大功告成
  第二步当然是第导出的文件进行操作了,你想干什么就干什么把,如此强大的ultraedit,批查询、替换简直就是A piece of cake.
  好了,假定你所有的改动都该好了,当然是要怎么把改动的结果写入SAS的CATALOG了,很简单,就是把上面的输出结果改把改把,然后再在SAS命令窗口运行就会把所有改动自动写入SAS的CATALOG了,如下
  /*导入*/
  dm “build ***.scl;clear;include '***.scl';save;compile;saveclass;end;”
  看看,连complie,saveclass都给你做了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-19 11:46 , Processed in 0.077133 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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