SAS9新体验-在DATA STEP中使用对象

原创 2004年09月20日 13:41:00

SAS9新体验-关于DATA STEP的使用

不说那么多了,呵,真高兴,今天装上SAS 9.1.2了
小试了一个小小的技巧,还挺管用的
不知你有没有碰到这样的麻烦,比如在遍历数据集时需要打开一个字典表进行匹配搜索,你可能会这样做
 %let n=1000;
 data _null_;
 set 要遍历的数据集;
 arrary arr1{&n};
 if _n_=1 then do;
  装载字典表数据到数组arr1
 end;
 ....
 匹配当前记录到字典表
 run;
 555,真郁闷,那数组开多大才好呢,其实也可以这样解决,把字典表的记录条数存在一个宏变量中去,就算这样,也够麻烦的,还有匹配要自己写呢,要是写的不好,说不定速度就下降了,闷死了
 呵呵,不过现在可好了,SAS终于提供了一种终极解决方案,就是提供了2个可以在DATA STEP中使用的对象,分别为
 Hash object
、Hash Iterator Object
 不用说了吧,用过C++的人就知道了,那个HASH对象用来存储数据,Iterator对象就用来遍历hash对象中的数据了,OK,就是这样简单
 好了,来个例子吧,引用别人的,不是我的,不过测试是通过的
/* Richard A. DeVenezia
 * www.devenezia.com
 * Feb 11, 2003
 *
 * Show the values of the data items of a DATA Step hash object in the log
 */

%macro putHash (hash, vars);

  %*
  %* hash - variable that references a hash object
  %* vars - space separated list of variables linked to the data items of hash
  %*        separate with pound sign (#) to get varname=varvalue format
  %*;

  %* generate a random variable name;
  %local random hi rc;
  %let random = %substr(%sysfunc(ranuni(0),10.8),3);
  %let hi = hi_&random;
  %let rc = rc_&random;

  %* emit DATA Step code that iterates the hash and
  %* puts the data items values in the log;

  declare hiter &hi ("&hash");
  do &rc = &hi..first() by 0 while (&rc = 0);
    put %sysfunc(translate(&vars,=,#));
    &rc = &hi..next();
  end;
  &hi..delete();
  put;

  %put WARNING: Values of variables &vars will change;

%mend;

data _null_;
  * prep the PDV, this lazy way is not always recommended;
  if 0 then set sashelp.class(obs=0);

  declare hash H (dataset:'sashelp.class');
  H.defineKey ('Name');
  H.defineData('Name', 'Age', 'Weight', 'Sex');
  H.defineDone();

  %putHash (H,name#age#weight#sex#);
  %putHash (H,name age weight sex);

  stop;
run;
 看到输出结果了吧,还有什么不明白么?实在不知道就去看SAS帮助吧,很EASY的

SAS9新体验-在DATA STEP中使用JAVA对象

简介DSCI提供建立和处理组件对象在DATA STEP程序中,JAVAOBJ就是这样的一个对象,其提供类似JNI的机制,可实例化JAVA 类,访问对象属性和方法定义JAVA对象其由DECLARE语法支...
  • AnyJack
  • AnyJack
  • 2004年09月27日 17:11
  • 1872

SAS9新体验-在DATA STEP中使用perl 正则表达式支持(Regular Expressions)

sas自9版开始支持perl(Perl 5.6.1 ) 正则表达式支持,极大的方便了数据校验的简易性、可靠性在没有Regular Expressions(RE)前,只能使用index,substr,t...
  • AnyJack
  • AnyJack
  • 2004年09月22日 14:04
  • 2071

Data Step Hash Objects as Programming Tools(2)

A PEEK UNDER THE HOOD We have just seen the tip of the hash iceberg from the outside. An inquiring ...
  • yugao1986
  • yugao1986
  • 2011年08月29日 15:18
  • 692

微软输入法使用技巧

微软输入法使用技巧
  • qq_36743482
  • qq_36743482
  • 2017年11月24日 15:35
  • 127

理解opencv中的step[]和step()

这里,为了方便表述,引入两个概念。 1. “合元素”,同一位置所有通道元素的整体 1. “分元素”,某位置一个通道的元素 step1(i):第i+1维度中分元素的个数 step...
  • A1367297309
  • A1367297309
  • 2016年11月07日 15:53
  • 742

删除微软输入新体验 2010

打开360安全卫士,点击电脑清理,打开更多,找到“默认软件”,把输入法设置成搜狗输入法,重启即可。...
  • lnfxcf
  • lnfxcf
  • 2015年10月08日 10:42
  • 136

SAS9.2新功能--在DATA STEP中使用自定义函数

SAS9.2已经蠢蠢欲动了很多初学SAS的人都不明白为什么SAS不支持自定义函数,而只能使用内建函数现在SAS9.2终于突破这一限制,可以自由的写自己的函数,并被DATA 步使用例子如下:proc f...
  • AnyJack
  • AnyJack
  • 2006年11月30日 10:36
  • 4864

Intellij IDEA调试功能使用总结(step over / step into / force step into/step out等)

Intellij IDEA调试功能使用总结(step over / step into / force step into/step out等)
  • theusProme
  • theusProme
  • 2016年11月03日 00:37
  • 3906

angularjs(step by step):Data Binding

Data-Binding 数据绑定: 在angular当中,所谓的数据绑定
  • qq_19245589
  • qq_19245589
  • 2014年08月13日 22:09
  • 350

Step.js 使用教程(附源码解析)

Step.js(https://github.com/creationix/step)是控制流程工具(大小仅 150 行代码),解决回调嵌套层次过多等问题。适用于读文件、查询数据库等回调函数相互依赖,...
  • zhangxin09
  • zhangxin09
  • 2013年10月25日 15:18
  • 8724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SAS9新体验-在DATA STEP中使用对象
举报原因:
原因补充:

(最多只允许输入30个字)