*! version 3.0.0 10/22/93 STB-24: snp7.1 program define spbase if "`*'"=="" { di in bl "-> spline xvar [if] [in] [, [gen(basis_name)]" di in bl _skip(10) "[Nknots(#)] [Knots(#...#)]]" exit 198 } version 3.0 local varlist "req ex min(1) max(1)" local if "opt" local in "opt" local options "GEN(string) Nknots(int 0) Knots(string) " parse "`*'" if "`gen'"=="" { di in red "Must specify name for basis" exit 198 } parse "`varlist'", parse(" ") tempvar X quietly { gen `X'=`1' `if' `in' count if `X'<. local cnt = _result(1) if `cnt'<3 { noisily error 2001 } local x "`1'" _crcslbl `X' `1' sort `X' local kN = `X'[`cnt'] local k0=`X'[1] * GENERATE INTERIOR KNOTS if "`knots'"=="" { local nk = `nknots' if `nk' == 0 { local nk = int((`cnt')^.25) } local j = `nk' while `j' > 0 { local k`j'=`X'[int((`j'*`cnt'/(`nk'+1))+.5)] local j = `j' -1 } } else { parse "`knots'", parse(" ,") local nk = 0 while "`1'"!="" { if "`1'"!=","{ if `1'<`k0' | `1'>`kN' { noisily di "knot at `1' ignored"} else { local nk = `nk' + 1 local k`nk' = `1' } } macro shift } } * CREATE REGRESSION VARIABLES local j = 1 local gen1 "`x'" while `j' <= `nk' { confirm new var `gen'`j' #delimit ; gen `gen'`j'= -((`kN'-`k`j'')/(`kN'-`k0'))*(`X'-`k0')^3 ; /* old replace `gen'`j'=`gen'`j'+(`X'-`k`j'')^3 if `X'>`k`j'' ; */ replace `gen'`j'=`gen'`j'+(`X'-`k`j'')^3 if `X'>`k`j'' & `k`j'' > `k0' ; replace `gen'`j'=(`kN'-`k`j'')*(`k`j''-`k0') *(`kN'+`k`j''+`k0'-3*`X') if `X'>`kN' ; #delimit cr lab var `gen'`j' "(`x'-k`j') cubed" local gen1 "`gen1' `gen'`j'" local j = `j' +1 } mac def `gen' "`gen1'" } end