📄 gsort.ado
字号:
*! version 1.0.7 06may2003
program gsort
version 6.0, missing
parse `"`*'"', parse(" +-,")
local noryet 1
local i 1
while `"`1'"'!="" & `"`1'"'!="," {
if `"`1'"'=="-" | `"`1'"'=="+" {
local sign `"`1'"'
mac shift
if `"`1'"'=="," | `"`1'"'=="" { error 198 }
}
else local sign "+"
unabbrev `1'
if `noryet' & `"`sign'"'=="+" {
local part1 `"`part1' `s(varlist)'"'
}
else {
local noryet 0
local sign`i' `"`sign'"'
local names `"`names' `1'"'
local i=`i'+1
}
mac shift
}
if `"`part1'"'=="" & `"`names'"'=="" {
di in red "varlist required"
exit 100
}
local options "Generate(string) Mfirst"
parse `"`*'"'
if `"`generat'"'!="" {
confirm new var `generat'
}
parse `"`names'"', parse(" ")
local i 1
while `"``i''"'!="" {
sort ``i''
tempvar n
quietly gen long `n' = .
quietly by ``i'': replace `n'=1 if _n==1
quietly replace `n'= 0 `sign`i'' sum(`n')
if `"`mfirst'"' == "" {
local typ : type ``i''
if substr("`typ'",1,3) != "str" {
qui replace `n'=``i'' if ``i''>=.
}
}
local tvars `"`tvars' `n'"'
quietly compress `n'
local i=`i'+1
}
sort `part1' `tvars'
if `"`generat'"'!="" {
tempvar mark
qui by `part1' `tvars': gen long `mark' = 1 if _n==1
qui replace `mark' = sum(`mark')
qui compress `mark'
sort `mark'
rename `mark' `generat'
}
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -