*! version 1.1.1 10/20/93 STB-16: ssi5.1 program define fcnplot version 3.1 parse "`*'", parse(" X") local toload "exp1" while "`1'"!="from" & "`1'"!="to" & "`1'"!="returns" & "`1'"!="" { if "`1'"=="X" { if "`toload'"=="exp2" { di in red "X may be specifed only once" exit 198 } local toload "exp2" } else { local `toload' "``toload'' `1'" } mac shift } if "`toload'"!="exp2" { di in red "X must be specified" exit 198 } if "`1'"=="" { error 198 } if "`1'"=="returns" { if "`2'"=="macro" { local type "`3'" local rtnval } else if "`2'"=="exp" { local rtnval "`3'" local type } else error 198 mac shift 3 local progttl "`exp1' x `exp2'" local inline "*" } else { local progttl = substr("`exp2'",2,.) local progttl "`exp1'x`progttl'" local callout "*" } local toload "BAD" parse "`*'", parse(" ,") while "`1'"!="" & "`1'"!="," { if "`1'"=="to" { local toload "mhi" } else if "`1'"=="from" { local toload "mlo" } else if "`1'"=="obs" { local toload "mobs" } else if "`toload'"=="BAD" { error 198 } else { local `toload' "``toload''`1'" } mac shift } local options /* */ "Connect(string) REPLACE L1title(string) Symbol(string) SLow *" parse "`*'" if "`mhi'"=="" { di in red "to specifier requried" exit 198 } if "`mlo'"=="" { di in red "from specifier required" exit 198 } tempname lo hi obs m b hold tempname X if "`mobs'"=="" { scalar `obs' = cond("`inline'"=="*",21,101) } else { scalar `obs' = `mobs' if int(`obs')!=`obs' | `obs'<2 | `obs'>350 { di in red "obs must be an integer between 2 and 350" exit 198 } } scalar `lo' = `mlo' scalar `hi' = `mhi' if `lo'>`hi' { scalar `hold' = `lo' scalar `lo' = `hi' scalar `hi' = `hold' } scalar `m' = (`hi'-`lo')/(`obs'-1) scalar `b' = `lo' - `m' if "`replace'"=="" { preserve } local mobs = `obs' if "`callout'"=="*" & "`slow'"=="" { quietly { drop _all set obs `mobs' gen x = `m'*_n + `b' gen y = `exp1' x `exp2' } } else { matrix `X' = J(10,35,0) local k 1 local j 1 local i 1 while `i'<=`obs' { local x = `m'*`i' + `b' `callout' quietly `exp1' `x' `exp2' `callout' matrix `X'[`k',`j'] = ${`type'} `rtnval' `inline' matrix `X'[`k',`j'] = `exp1' `x' `exp2' local i=`i'+1 local j=`j'+1 if (`j'>35) { local j 1 local k=`k'+1 } } quietly { drop _all set obs `mobs' gen y = . gen x = `m'*_n + `b' local i 1 local k 1 local j 1 while `i'<=`obs' { replace y = `X'[`k',`j'] in `i' local i=`i'+1 local j=`j'+1 if `j'>35 { local j 1 local k=`k'+1 } } } } label data "y=`progttl'" if "`symbol'"!="" { local symbol "symbol(`symbol')" } else { if _N>50 { local symbol "symbol(o)" } } if "`connect'"=="" { local connect "connect(l)" } else local connect "connect(`connect')" if "`l1title'"=="" { local l1title "`progttl'" } label var y "`progttl'" graph y x, `symbol' `connect' l1("`l1title'") `options' end exit