'pvalはラジオボタンに対応します。
'ここから□□□まではユーザインタフェースの管理する
'コードです。
scalar pval = 2 

string stpwPrompt = "Set pvalue" 

string menu = """0.05"" ""0.10"" 0.20" 

string eqname 

string namePrompt = "Enter name of Equation" 

scalar result = @uidialog("Caption", "Stepwise Probit", "Edit", eqname, namePrompt, 64, "Radio", pval, stpwPrompt, menu) 

if pval="1" then 
	!cp=0.05
	else
		if pval="2" then
		!cp=0.1
		else
		!cp=0.2
		endif

endif

%eqname=eqname
'---□□□-----------------------------------------------

'元の推定式を***orgという名前でコピーしておきます
%newname=%eqname+"org"
copy %eqname %newname
'----------------------------------------------
'このプログラムは説明変数が2個以上で機能します。
'----------------------------------------------
'p値は直接データメンバとして用意されていませんので、
'z値と累積分布関数から計算し、p値をシリーズcheckpに
'コピーします。ただし、定数項のp値は操作の対象外とします。

'ループを開始するため、仮に!maxをゼロとします。
'ループ開始後に!maxには一番大きなp値が入ります。
!max=1

while !max > !cp

!num=0
!noc={%eqname}.@ncoef

'----------------------------------------------
'説明変数の数(定数項を含まない)が2個しかない場合は
'ステップワイズは実行しません(その2で追加)。
if !noc < 3 then 
@uiprompt("Error: Select larger p-value") 
stop
else
endif
'----------------------------------------------
series checkp
checkp=na
for !i=2 to !noc
'z値の符号によって計算式が異なるので、z値は絶対値を
'とります。
!z=@abs({%eqname}.@tstats(!i))
!p=(1-@cnorm(!z))*2
checkp(!i-1)=!p
next
'これで推定式からp値を取り出して、計算用のcheckpという
'シリーズの準備ができました。

'次に一番大きなp値を持つ変数を求めます。

!max=checkp(1)
for !j=1 to !noc-1
if checkp(!j+1) > !max then
	!max=checkp(!j+1)
	!num=!j+2
else
endif
next

'!maxが!cp(pの境界値)よりも小さい場合、以下のループは実行
'しません。
'主にここから下のコードを「その2」で追加しました。
'-------------------------------------------------
if !max < !cp then
else

'変数名(series object)を取得する
%indv={%eqname}.@varlist
%dep=@wmid(%indv,1,1)

'定数項(2番目)から外す変数の1つ手前までの文字列を取得
%s1=@wmid(%indv,2,!num-1)

'説明変数の個数
!ncoef={%eqname}.@ncoef
'外す変数の後ろから最後までの文字列を取得
%s2=@wmid(%indv,!num+2,!ncoef-!num)
%ns=%dep+" "+%s1+" "+%s2
%mtd={%eqname}.@method
'外した後の推定式はeq01を上書きします。
equation {%eqname}.{%mtd} {%ns}
endif

wend
show {%eqname}


'show eqname
'show pval