1

観察ごとに特定の製品を購入する確率を含むデータセットがあります。次に例を示します。

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);

しかし、残念ながらそれはうまくいきません。

誰か助けてくれませんか?

乾杯!

4

1 に答える 1

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 と同等ですが、データから結果を取得する方が優れています。)

また、値をマクロ変数に入れるのではなく、コードでデータセットを使用することもお勧めします。

于 2013-09-06T14:24:32.550 に答える