📄 mkspline.ado
字号:
*! version 1.1.2 23sep2004
program define mkspline
version 6, missing
gettoken name 0 : 0, parse(" =")
gettoken n 0 : 0, parse(" =")
gettoken eqsign : 0, parse(" =")
if "`eqsign'" == "=" { /* newstub # = ... */
gettoken eqsign 0 : 0, parse(" =")
local hold
confirm integer number `n'
if `n'<2 { error 198 }
syntax varname [if] [in] [, Marginal Pctile]
marksample touse
if "`pctile'"=="" {
quietly summ `varlist' if `touse'
local base = r(min)
local incr = (r(max)-r(min))/`n'
local i 1
while `i'<`n' {
local base = `base' + `incr'
local fmted : dis string(`base', "%9.0g")
local arg "`arg' `name'`i' `fmted'"
local i=`i'+1
}
}
else {
local base = 0
tempvar p
local base 0
local incr = 100/`n'
local i 1
while `i'<`n' {
local base = `base' + `incr'
capture drop `p'
qui egen float `p' = pctile(`varlist') /*
*/ if `touse', p(`base')
qui summ `p'
local fmted : di string(r(mean), "%9.0g")
local arg "`arg' `name'`i' `fmted'"
local i=`i'+1
}
}
local arg "`arg' `name'`i'"
mkspline `arg' = `varlist' if `touse', `margina'
exit
}
/* newvar # newvar # ... newvar = ... */
local i 0
local last -1e+30
while "`eqsign'" != "=" {
confirm new variable `name'
confirm number `n'
if `n' <= `last' { error 198 }
local i = `i' + 1
local v`i' "`name'"
local n`i' `n'
tempvar t`i'
gettoken name 0 : 0, parse(" =")
gettoken eqsign 0 : 0, parse(" =")
if "`eqsign'"!="=" {
local n "`eqsign'"
}
}
local n = `i' + 1
confirm new variable `name'
local v`n' `name'
tempvar t`n'
local n`n' .
syntax varname [if] [in] [, Marginal]
marksample touse
if `n'<2 { error 198 }
if ("`margina'"!="") {
qui gen float `t1' = `varlist' if `touse'
qui compress `t1'
label var `t1' `"`varlist': (.,.)"'
local last `n1'
local i 2
while `i'<=`n' {
qui gen float `t`i''=max(0,`varlist'-`last') if `touse'
qui compress `t`i''
local ttl : di "`varlist': (" `last' ",.)"
label var `t`i'' "`ttl'"
local last `n`i''
local i=`i'+1
}
}
else {
qui gen float `t1' = min(`varlist',`n1') if `touse'
qui compress `t1'
local ttl : di "`varlist': (.," `n1' ")"
label var `t1' "`ttl'"
local last `n1'
local i 2
while `i'<=`n' {
qui gen float `t`i'' = /*
*/ max(min(`varlist',`n`i''),`last') - `last' /*
*/ if `touse'
qui compress `t`i''
local ttl : di "`varlist': (`last'," `n`i'' ")"
label var `t`i'' "`ttl'"
local last `n`i''
local i=`i'+1
}
}
local i 1
while `i'<=`n' {
rename `t`i'' `v`i''
local i=`i'+1
}
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -