SAS9新体验-在DATA STEP中使用对象
2004-09-20 13:41
513 查看
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的
不说那么多了,呵,真高兴,今天装上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对象
- SAS9新体验-在DATA STEP中使用perl 正则表达式支持(Regular Expressions)
- SAS9.2新功能--在DATA STEP中使用自定义函数
- FormData 对象的使用
- php+html5使用FormData对象提交表单及上传图片的方法
- IBM Data Studio使用----对象创建的双引号/大小写问题以及表/列重命名
- 使用FormData对象提交表单及上传图片
- 通过jQuery Ajax使用FormData对象上传文件
- Web 前沿——HTML5 Form Data 对象的使用
- [Step By Step]使用SAP Business Objects Data Services将Mysql中的数据导入到SAP HANA中,并使用简单的Transformation
- HTML5 FormData对象 的上传文件的使用
- 使用SqlDataAdapter对象获取数据(转自:http://www.cnblogs.com/zyh-nhy/archive/2009/01/07/1371177.html)
- 通过jQuery Ajax使用FormData对象上传文件
- 面向对象方式使用数据库---CoreData的基本使用
- Qt中QString对象使用toStdString().data()会产生错误
- [Step By Step]在SAP Business Objects Data Services中使用Pivot Transform行转列功能并导入到SAP HANA中(Pivot Transform)
- sas scl程序设计使用技巧-面向对象的程序设计
- 使用eval转换json对象时为什么外边还要加括号eval("("+data+")");
- Web前沿—HTML5 Form Data 对象的使用
- 使用FormData对象