@ itzy правильно указал, почему ваш подход не будет работать.Но - это решение, поддерживающее дух вашего подхода: вам нужно создать функцию расчета мощности с использованием PROC FCMP.На самом деле, AFAIK, чтобы вызвать процедуру изнутри функции в PROC FCMP, вам нужно обернуть вызов в макрос, так что вы почти на месте.
Вот ваш макрос - немного измененный (в основном, для исправления)оператор symput
):
%macro ttest_power;
proc power;
twosamplemeans test=diff_satt
groupmeans = &meanA | &meanB
groupstddevs = &stdA | &stdB
groupns = (&nA &nB)
power = .;
ods output Output=pw_out;
run;
data _null_;
set pw_out;
call symput('tpw', power);
run;
%mend ttest_power;
Теперь мы создадим функцию, которая будет вызывать ее:
proc fcmp outlib=work.funcs.test;
function ttest_power_fun(meanA, stdA, nA, meanB, stdB, nB);
rc = run_macro('ttest_power', meanA, stdA, nA, meanB, stdB, nB, tpw);
if rc = 0 then return(tpw);
else return(.);
endsub;
run;
И, наконец, мы можем попробовать использовать эту функцию на шаге данных:
options cmplib=work.funcs;
data test;
input a s1 n1 a2 s2 n2;
pw_tmp=ttest_power_fun(a, s1, n1, a2, s2, n2);
cards;
0 1 10 0 1 10
0 1 10 1 1 10
;
run;
proc print data=test;