SAS 汇总SQL查询宏变量的值(Sum Values Stored in Macro Variables )

【目的】

(1)通过SQL将要查询的多个结果保存到多个宏变量里面;

(2)通过MACRO将多个宏变量的值汇总到一个变量里面用于进一步分析。

【程序】

 

*创建一个样例数据库temp;
data temp;
	do i=1 to 10;
		output;
	end;
run;

%macro matrix();
	proc sql ;
		select  i into :x1 - :x10 from temp;
*将i的值传递给变量x1-x10.以下的程序实现如何在宏中汇总x1-x10; 
		*%put &x1;
	quit;
	%let sm=0;
		%do i=1 %to 10;
		%let sm=&sm+&&x&i;

*这里的sm是一串字符串相当于0+1+2+3+4...+10;
 		%end;
	%let result=%eval(&sm);

*%eval执行上面那串字符串的值,并赋给result变量。这个也就是SAS MACRO的基本逻辑,先翻译成可计算的语句,再执行;
	%put &result;
%mend;
%matrix();


 


还有两种办法实现,一种是使用sql create table,然后insert记录,再用proc mean统计,效率太低;另一种是使用数组,将x1-x10的值赋给数组变量,再求和。好像都很麻烦,我居然没有发现数组行求和或者列求和的函数;从这个角度发现还是R 的向量运算的效率比较高。

这个问题在goolge baidu上面检索了一整天,看了一堆的英文资料,居然没有发现很好的答案,有一篇资料是说用%sysfunc(sum())的方法,但没有人提出最终解决方案。于是整理提交我的方法方便其他同志查询。

 思考:如果要考虑计算平均数;如果考虑到缺失值;是否可以考虑用户自定义函数(SAS提供的新功能)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值