如何将%宏的结果分配给宏变量

时间:2013-09-06 14:13:30

标签: sas sas-macro

我的数据集具有按观察购买特定产品的概率。这是一个例子:

DATA probabilities; 
INPUT id P_prod1 P_prod2 P_prod3 ; 
DATALINES; 
1 0.02 0.5 0.32
2 0.6 0.08 0.12
3 0.8 0.34 0.001
; 

我需要计算每种产品的中位数。我是这样做的:

%macro get_median (product);
proc means data=probabilities median;
var &product ;
output out=median_data (drop=_type _freq_) median=median;
run;
%mend;

此时我可以通过调用

获得每个产品的中位数
%get_median(P_product1);

现在,我要做的最后一件事是将中值的数值结果分配给宏变量。我最好的猜测是如何做到这一点:

%let med_P_prod1=%get_median(P_prod1);

但不幸的是,这不起作用。

有人可以帮忙吗?

干杯!

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是定义一个%global宏变量,并将let语句设置为宏内的数值结果。

%macro get_median (product);
proc means data=probabilities median;
var &product ;
output out=median_data (drop=_type _freq_) median=median;
run;
%global macroresult;
proc sql;
select median into :macroresult separated by ' ' from median_data;
quit;
%mend;

(该SQL语句等同于LET,因为它定义了一个宏变量,但它更适合从数据中获取结果。)

我还建议您只在代码中使用数据集,而不是将值放在宏变量中。