我的数据集具有按观察购买特定产品的概率。这是一个例子:
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);
但不幸的是,这不起作用。
有人可以帮忙吗?
干杯!
答案 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,因为它定义了一个宏变量,但它更适合从数据中获取结果。)
我还建议您只在代码中使用数据集,而不是将值放在宏变量中。