You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
369 lines
9.7 KiB
Plaintext
369 lines
9.7 KiB
Plaintext
7 months ago
|
*! lstrfun Version 1.2 dan_blanchette@unc.edu 09Aug2011
|
||
|
*! the carolina population center, unc-ch
|
||
|
* -Nick Cox let me know that the regular expersion functions were available in Stata 9.2
|
||
|
* but were just not documented
|
||
|
* lstrfun Version 1.1 dan_blanchette@unc.edu 22Jul2011
|
||
|
** -it now can run regexr(), regexm() and regexs()
|
||
|
** lstrfun Version 1.0 dan_blanchette@unc.edu 09Aug2010
|
||
|
** Center for Entrepreneurship and Innovation Duke University's Fuqua School of Business
|
||
|
* modify long local macros with mata string functions
|
||
|
|
||
|
program define lstrfun
|
||
|
version 9.2
|
||
|
|
||
|
syntax [namelist(local)] [, lower(string asis) upper(string asis) proper(string asis) ///
|
||
|
ltrim(string asis) itrim(string asis) rtrim(string asis) trim(string asis) ///
|
||
|
substr(string asis) subinstr(string asis) subinword(string asis) ///
|
||
|
reverse(string asis) strdup(string asis) soundex(string asis) soundex_nara(string asis) ///
|
||
|
strlen(string asis) strpos(string asis) _substr(string asis) indexnot(string asis) ///
|
||
|
strmatch(string asis) regexr(string asis) regexm(string asis) regexms(string asis) ///
|
||
|
]
|
||
|
|
||
|
if missing(`"`namelist'"') {
|
||
|
display as error "need to specify a local macro variable name to modify or create"
|
||
|
exit 198
|
||
|
}
|
||
|
local n_locals : word count `namelist'
|
||
|
if `n_locals' > 1 {
|
||
|
display as error "only one local macro variable name can be submitted"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
// local m1= !missing(`"`macval(lower)'"'
|
||
|
// says "too few quotes" when a fairly long macro submitted but only inside a program
|
||
|
// using short macro names and no spaces to make it even shoerter
|
||
|
local m1=`"`macval(lower)'"'!=""
|
||
|
local m2=`"`macval(proper)'"'!=""
|
||
|
local m3=`"`macval(upper)'"'!=""
|
||
|
local m4=`"`macval(ltrim)'"'!=""
|
||
|
local m5=`"`macval(itrim)'"'!=""
|
||
|
local m6=`"`macval(rtrim)'"'!=""
|
||
|
local m7=`"`macval(trim)'"'!=""
|
||
|
local m8=`"`macval(substr)'"'!=""
|
||
|
local m9=`"`macval(subinstr)'"'!=""
|
||
|
local m10=`"`macval(subinword)'"'!=""
|
||
|
local m11=`"`macval(strdup)'"'!=""
|
||
|
local m12=`"`macval(reverse)'"'!=""
|
||
|
local m13=`"`macval(soundex)'"'!=""
|
||
|
local m14=`"`macval(soundex_nara)'"'!=""
|
||
|
local m15=`"`macval(strlen)'"'!=""
|
||
|
local m16=`"`macval(strpos)'"'!=""
|
||
|
local m17=`"`macval(_substr)'"'!=""
|
||
|
local m18=`"`macval(indexnot)'"'!=""
|
||
|
local m19=`"`macval(strmatch)'"'!=""
|
||
|
local m20=`"`macval(regexr)'"'!=""
|
||
|
local m21=`"`macval(regexm)'"'!=""
|
||
|
local m22=`"`macval(regexms)'"'!=""
|
||
|
|
||
|
|
||
|
if `m1' ///
|
||
|
+ `m2' ///
|
||
|
+ `m3' ///
|
||
|
+ `m4' ///
|
||
|
+ `m5' ///
|
||
|
+ `m6' ///
|
||
|
+ `m7' ///
|
||
|
+ `m8' ///
|
||
|
+ `m9' ///
|
||
|
+ `m10' ///
|
||
|
+ `m11' ///
|
||
|
+ `m12' ///
|
||
|
+ `m13' ///
|
||
|
+ `m14' ///
|
||
|
+ `m15' ///
|
||
|
+ `m16' ///
|
||
|
+ `m17' ///
|
||
|
+ `m18' ///
|
||
|
+ `m19' ///
|
||
|
+ `m20' ///
|
||
|
+ `m21' > 1 {
|
||
|
display as error "you can only specify 1 option in {helpb lstrfun:lstrfun}"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
if `m1' == 1 {
|
||
|
mata: long_lower(`macval(lower)')
|
||
|
c_local `namelist' `"`macval(lower)'"'
|
||
|
}
|
||
|
else if `m2' == 1 {
|
||
|
mata: long_proper(`macval(proper)')
|
||
|
c_local `namelist' `"`macval(proper)'"'
|
||
|
}
|
||
|
else if `m3' == 1 {
|
||
|
mata: long_upper(`macval(upper)')
|
||
|
c_local `namelist' `"`macval(upper)'"'
|
||
|
}
|
||
|
else if `m4' == 1 {
|
||
|
mata: long_ltrim(`macval(ltrim)')
|
||
|
c_local `namelist' `"`macval(ltrim)'"'
|
||
|
}
|
||
|
else if `m5' == 1 {
|
||
|
mata: long_itrim(`macval(itrim)')
|
||
|
c_local `namelist' `"`macval(itrim)'"'
|
||
|
}
|
||
|
else if `m6' == 1 {
|
||
|
mata: long_rtrim(`macval(rtrim)')
|
||
|
c_local `namelist' `"`macval(rtrim)'"'
|
||
|
}
|
||
|
else if `m7' == 1 {
|
||
|
mata: long_trim(`macval(trim)')
|
||
|
c_local `namelist' `"`macval(trim)'"'
|
||
|
}
|
||
|
else if `m8' == 1 {
|
||
|
mata: long_substr(`macval(substr)')
|
||
|
c_local `namelist' `"`macval(substr)'"'
|
||
|
}
|
||
|
else if `m9' == 1 {
|
||
|
mata: long_subinstr(`macval(subinstr)')
|
||
|
c_local `namelist' `"`macval(subinstr)'"'
|
||
|
}
|
||
|
else if `m10' == 1 {
|
||
|
mata: long_subinword(`macval(subinword)')
|
||
|
c_local `namelist' `"`macval(subinword)'"'
|
||
|
}
|
||
|
else if `m11' == 1 {
|
||
|
mata: long_strdup(`macval(strdup)')
|
||
|
local len_strdup : length local strdup
|
||
|
if `len_strdup' < `len_m_var' {
|
||
|
local clen_m_var= string(`len_m_var',"%11.0gc")
|
||
|
if c(SE) & c(maxvar) < 32767 & `len_m_var' <= 1081511 {
|
||
|
display as error "{cmd:strdup()} generated a string that has `clen_m_var' characters which is more than Stata can handle" ///
|
||
|
" when {helpb maxvar:maxvar} is set to `c(maxvar)'."
|
||
|
display as error "Increase your {helpb maxvar:maxvar} setting higher and try again."
|
||
|
exit 149
|
||
|
}
|
||
|
else {
|
||
|
display as error "{cmd:strdup()} generated a string that has `clen_m_var' characters (which is more than Stata can handle)"
|
||
|
exit 149
|
||
|
}
|
||
|
}
|
||
|
c_local `namelist' `"`macval(strdup)'"'
|
||
|
}
|
||
|
else if `m12' == 1 {
|
||
|
mata: long_reverse(`macval(reverse)')
|
||
|
c_local `namelist' `"`macval(reverse)'"'
|
||
|
}
|
||
|
else if `m13' == 1 {
|
||
|
mata: long_soundex(`macval(soundex)')
|
||
|
c_local `namelist' `"`macval(soundex)'"'
|
||
|
}
|
||
|
else if `m14' == 1 {
|
||
|
mata: long_soundex_nara(`macval(soundex_nara)')
|
||
|
c_local `namelist' `"`macval(soundex_nara)'"'
|
||
|
}
|
||
|
else if `m15' == 1 {
|
||
|
mata: long_strlen(`macval(strlen)')
|
||
|
c_local `namelist' `"`macval(strlen)'"'
|
||
|
}
|
||
|
else if `m16' == 1 {
|
||
|
mata: long_strpos(`macval(strpos)')
|
||
|
c_local `namelist' `"`macval(strpos)'"'
|
||
|
}
|
||
|
else if `m17' == 1 {
|
||
|
mata: long__substr(`macval(_substr)')
|
||
|
c_local `namelist' `"`macval(_substr)'"'
|
||
|
}
|
||
|
else if `m18' == 1 {
|
||
|
mata: long_indexnot(`macval(indexnot)')
|
||
|
c_local `namelist' `"`macval(indexnot)'"'
|
||
|
}
|
||
|
else if `m19' == 1 {
|
||
|
mata: long_strmatch(`macval(strmatch)')
|
||
|
c_local `namelist' `"`macval(strmatch)'"'
|
||
|
}
|
||
|
else if `m20' == 1 {
|
||
|
mata: long_regexr(`macval(regexr)')
|
||
|
c_local `namelist' `"`macval(regexr)'"'
|
||
|
}
|
||
|
else if `m21' == 1 {
|
||
|
mata: long_regexm(`macval(regexm)')
|
||
|
c_local `namelist' `"`macval(regexm)'"'
|
||
|
}
|
||
|
else if `m22' == 1 {
|
||
|
mata: long_regexms(`macval(regexms)')
|
||
|
c_local `namelist' `"`macval(regexms)'"'
|
||
|
}
|
||
|
else {
|
||
|
display as error "need to specify an option in {helpb lstrfun:lstrfun}"
|
||
|
exit 198
|
||
|
}
|
||
|
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
mata:
|
||
|
void long_lower(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strlower(lstring)
|
||
|
st_local("lower",m_var)
|
||
|
}
|
||
|
|
||
|
void long_proper(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strproper(lstring)
|
||
|
st_local("proper",m_var)
|
||
|
}
|
||
|
|
||
|
void long_upper(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strupper(lstring)
|
||
|
st_local("upper",m_var)
|
||
|
}
|
||
|
|
||
|
void long_ltrim(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strltrim(lstring)
|
||
|
st_local("ltrim",m_var)
|
||
|
}
|
||
|
|
||
|
void long_itrim(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= stritrim(lstring)
|
||
|
st_local("itrim",m_var)
|
||
|
}
|
||
|
|
||
|
void long_rtrim(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strrtrim(lstring)
|
||
|
st_local("rtrim",m_var)
|
||
|
}
|
||
|
|
||
|
void long_trim(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strtrim(lstring)
|
||
|
st_local("trim",m_var)
|
||
|
}
|
||
|
|
||
|
void long_substr(string scalar lstring, real scalar start, real scalar length)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= substr(lstring,start,length)
|
||
|
st_local("substr",m_var)
|
||
|
}
|
||
|
|
||
|
void long_subinstr(string scalar lstring, string scalar old, string scalar snew, real scalar cnt)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= subinstr(lstring,old,snew,cnt)
|
||
|
st_local("subinstr",m_var)
|
||
|
}
|
||
|
|
||
|
void long_subinword(string scalar lstring, string scalar old, string scalar snew, real scalar cnt)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= subinword(lstring,old,snew,cnt)
|
||
|
st_local("subinword",m_var)
|
||
|
}
|
||
|
|
||
|
void long_strdup(string scalar lstring, real scalar n)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= n*lstring
|
||
|
real scalar len_lstring
|
||
|
len_lstring= n * strlen(lstring)
|
||
|
real scalar len_m_var
|
||
|
len_m_var= strlen(m_var)
|
||
|
string scalar slen_m_var
|
||
|
slen_m_var= strofreal(len_m_var)
|
||
|
st_local("len_m_var",slen_m_var)
|
||
|
st_local("strdup",m_var)
|
||
|
}
|
||
|
|
||
|
void long_reverse(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= strreverse(lstring)
|
||
|
st_local("reverse",m_var)
|
||
|
}
|
||
|
|
||
|
void long_soundex(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= soundex(lstring)
|
||
|
st_local("soundex",m_var)
|
||
|
}
|
||
|
|
||
|
void long_soundex_nara(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= soundex_nara(lstring)
|
||
|
st_local("soundex_nara",m_var)
|
||
|
}
|
||
|
|
||
|
void long_strlen(string scalar lstring)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
real scalar nm_var
|
||
|
nm_var= strlen(lstring)
|
||
|
m_var= strofreal(nm_var)
|
||
|
st_local("strlen",m_var)
|
||
|
}
|
||
|
|
||
|
void long_strpos(string scalar lstring, string scalar needle)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
real scalar nm_var
|
||
|
nm_var= strpos(lstring,needle)
|
||
|
m_var= strofreal(nm_var)
|
||
|
st_local("strpos",m_var)
|
||
|
}
|
||
|
|
||
|
void long__substr(string scalar lstring, string scalar tosub, real scalar pos)
|
||
|
{
|
||
|
_substr(lstring, tosub, pos)
|
||
|
st_local("_substr",lstring)
|
||
|
}
|
||
|
|
||
|
void long_indexnot(string scalar lstring, string scalar needle)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
real scalar nm_var
|
||
|
nm_var= indexnot(lstring,needle)
|
||
|
m_var= strofreal(nm_var)
|
||
|
st_local("indexnot",m_var)
|
||
|
}
|
||
|
|
||
|
void long_strmatch(string scalar lstring, string scalar pattern)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
real scalar nm_var
|
||
|
nm_var= strmatch(lstring,pattern)
|
||
|
m_var= strofreal(nm_var)
|
||
|
st_local("strmatch",m_var)
|
||
|
}
|
||
|
|
||
|
void long_regexr(string scalar lstring, string scalar pattern, string scalar rep)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
m_var= regexr(lstring,pattern,rep)
|
||
|
st_local("regexr",m_var)
|
||
|
}
|
||
|
|
||
|
void long_regexm(string scalar lstring, string scalar pattern)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
real scalar nm_var
|
||
|
nm_var= regexm(lstring,pattern)
|
||
|
m_var= strofreal(nm_var)
|
||
|
st_local("regexm",m_var)
|
||
|
}
|
||
|
|
||
|
void long_regexms(string scalar lstring, string scalar pattern, real scalar ss)
|
||
|
{
|
||
|
string scalar m_var
|
||
|
if (regexm(lstring,pattern)) {
|
||
|
m_var= regexs(ss)
|
||
|
}
|
||
|
st_local("regexms",m_var)
|
||
|
}
|
||
|
|
||
|
end
|