proc iml;
use rdata2;
read all var _all_ into xy;
close rdata2;
print xy;
use ppfinal2;
read all var _all_ into ppxy;
close ppfinal2;
print ppxy;
start f_prob(beta) global(xy, ppxy);
p = nrow(xy);
sum1 = 0.; sum2 = 0.;
do i = 1 to p;
sum1 = sum1 + xy*beta;
suminside&i. = 0.;
n = nrow(ppxy(SOME CONDITIONED ROWS));
do j = 1 to n;
suminside&i. = suminside&i. + ppxy(SOME CONDITIONED ROWS)*beta;
end;
sum2 = sum2 + log(suminside&i.);
end;
f = sum1 - sum2;
return(f);
finish f_prob;
我打算对β进行mle估计,这是一个包含10个未知参数的向量。 xy包含矩阵形式的所有观测值,每次观测10列。
还有另一个更大的矩阵ppxy,也有10列,但我只想在每次迭代的内部do循环中指定一些ppxy行。
当i = 1时,有什么方法可以调节ppxy来获得ppxy的前12行,而接下来的12行ppxy用于i = 2 ....等等。此外,这种方式可以用于β参数矢量的mle估计吗?或者还有其他方法吗?我正在使用SAS UE。提前谢谢。
答案 0 :(得分:0)
有关SAS / IML中MLE估计的概述和示例,请参阅"Maximum likelihood estimation in SAS/IML'
针对您的具体问题,请使用以下代码获取大ppxy矩阵的子矩阵:
do i = 1 to p;
LastRow = 12*i; /* 12, 24, 36, etc */
FirstRow = LastRow - 11; /* 1, 13, 25, etc */
ppxy_i = ppxy[FirstRow:LastRow, ];
/* use ppxy_i in computations */
end;
矩阵ppxy_i
在每次迭代期间发生变化。它包含12行ppxy
矩阵,其中行在迭代期间以12的倍数变化。