私と一緒に熊!これは私がしばらく努力してきたプロジェクトであり、多くのことを試してみると、うまく動作しないようです。SASでアレイを線形補間する方法は?
以下は、新しいテーブルを作成するために使用している既存のコードです。既存の出力テーブル(claims.simulation_ISLPx)も下にあります。
私がしたいことは、メンバ(5,6,8,10,12)の「配列」を取って、5つのメンバグループのプロセスの5回の反復、6つのメンバグループの6回の反復を実行することです。 12人のメンバーグループに対して12回の反復が行われます。
「プロセス」は、U(0,1)からランダムな値を引き出し、claim.simulationISLPxテーブル内の指定された値で線形補間して、グループ間の平均クレームを決定する必要があります5、6、8、10、または12で割ります)。
私のコードに何が追加されるのかわかりません。どんな助けでも本当に感謝しています。
ゼロ膨張し対数正規関数から/*入力と有料以下の式*/
%let P_0 = .25;
%let Mean = 8.9;
%let Std_Dev = 1.8;
%let ISL = 50000;
%let Deductible = 1750;
%let COINS = .80;
%let OOPM = 2000;
%let Min_Paid = 253.08;
%let Ind_Cap_Claim = 2500000;
%let Iterations = 10;
%let Distribution = 'Lognormal';
%let Member_Count = (5,6,8,10,12,15,20,25,30,40,50,60,70,80,90,100,125,150,175,200,250,300,400,500)
libname claims
data simulation;
do i = 1 to &Iterations;
Px = rand('Uniform',&P_0,1);
Px1 = rand('Uniform',0,1);/*generate random numbers from 0 to 1*/
if Px>= %sysevalf(&P_0) then
Allowed_Claims = quantile(&Distribution,Px1,%sysevalf(&Mean),%sysevalf(&Std_Dev)); /*inverse of cdf*/
output;
end;
run;
proc sql;
create table claims.simulation_ISLPx as
select Allowed_Claims, Px1
from simulation
order by Allowed_Claims,Px1;
quit;
proc sql;
alter table claims.simulation_ISLPx add Paid_Claims_NoISL float;
update claims.simulation_ISLPx
set Paid_Claims_NoISL = min(max(0,Allowed_Claims - %sysevalf(&OOPM), min(Allowed_Claims,
%sysevalf(&Min_Paid) + max(Allowed_Claims - %sysevalf(&Deductible)*%sysevalf(&COINS),0))),
%sysevalf(&Ind_Cap_Claim));
alter table claims.simulation_ISLPx add Paid_Claims_AfterISL float;
update claims.simulation_ISLPx
set Paid_Claims_AfterISL = min(Paid_Claims_NoISL, %sysevalf(&ISL));
alter table claims.simulation_ISLPx add Total_Cost float;
update claims.simulation_ISLPx
set Total_Cost = Paid_Claims_NoISL - Paid_Claims_AfterISL;
quit;
proc sql;
select * from claims.simulation_ISLPx;
run;
quit;
を許可、私はにはいくつかの方法があり
%let Member_Count= [5,6,8,10,12,15,20,25,30,40,50,60,70,80,90,100,125,150,175,200,250,300,400,500];
data simulation_interpolation;
do i = 1 to &Member_Count[0];
xyz = rand('uniform',0,1);
if xyz >= 0 then Px = xyz;
output;
end;
run;
proc print data= simulation_interpolation;
run;
サンプルの入力と出力のデータセットを含めるように質問を更新してください。また、[SASでアレイを使用する](http://www2.sas.com/proceedings/sugi30/242-30.pdf)についてもう少し学ぶことをお勧めします。 – user667489
ちょっとユーザー667489、残念ながら、サンプル入力、または使用された値は、内部的に 'シミュレーション'ステップによって生成されます。 – indiansrulz