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.
453 lines
11 KiB
Plaintext
453 lines
11 KiB
Plaintext
9 months ago
|
*! seeout version 1.2.3 21oct2009 by roywada@hotmail.com
|
||
|
*! (to accompany -outreg2-)
|
||
|
|
||
|
program define seeout
|
||
|
version 7.0
|
||
|
|
||
|
syntax [using] [,LABel LABelA(passthru) ]
|
||
|
|
||
|
if `"`using'"'~="" {
|
||
|
*** clean up file name, attach .txt if no file type is specified
|
||
|
local rest "`using'"
|
||
|
* strip off "using"
|
||
|
gettoken part rest: rest, parse(" ")
|
||
|
* strip off quotes
|
||
|
gettoken first second: rest, parse(" ")
|
||
|
cap local rest: list clean local(rest)
|
||
|
|
||
|
local rabbit `"""'
|
||
|
if index(`"`using'"', ".")==0 {
|
||
|
local file = `"`rabbit'`first'.txt`rabbit'"'
|
||
|
local using = `"using `file'"'
|
||
|
}
|
||
|
else {
|
||
|
local file = `"`rabbit'`first'`rabbit'"'
|
||
|
local using = `"using `file'"'
|
||
|
}
|
||
|
|
||
|
*** seeout the output
|
||
|
*local cl `"{stata `"seeout `pref'"': seeout `pref'}"'
|
||
|
*di as txt `"`cl'"'
|
||
|
seeing `using', `label'
|
||
|
}
|
||
|
|
||
|
else {
|
||
|
*** read the set preference if not out of date
|
||
|
|
||
|
* NOTE: `0' is written over below
|
||
|
cap quietly findfile outreg2.pref
|
||
|
tempname myfile
|
||
|
cap file open `myfile' using `"`r(fn)'"', read text
|
||
|
cap file read `myfile' date
|
||
|
cap file read `myfile' pref
|
||
|
cap file read `myfile' options
|
||
|
cap file close `myfile'
|
||
|
|
||
|
if "`date'"== "`c(current_date)'" {
|
||
|
*** seeout the output
|
||
|
|
||
|
if index(`"`options'"', "label")~=1 & index(`"`options'"', `"label("')==0 {
|
||
|
tokenize `"`options'"'
|
||
|
local count: word count `options'
|
||
|
if `count'~=0 {
|
||
|
local test 0
|
||
|
forval num=1/`count' {
|
||
|
if `"``num''"'=="label" {
|
||
|
local label label
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} /* ? */
|
||
|
gettoken first file: pref
|
||
|
|
||
|
*** codes recycled from outreg2:
|
||
|
* strip off quotes and extension
|
||
|
gettoken first second: file, parse(" ")
|
||
|
local temp = `"`first'"'
|
||
|
|
||
|
local next_dot = index(`"`temp'"',".")
|
||
|
local next_strip = substr(`"`temp'"',1,`=`next_dot'-1')
|
||
|
local strippedname = substr(`"`temp'"',1,`=`next_dot'-1')
|
||
|
|
||
|
* check for more dots
|
||
|
local change 0
|
||
|
while `change'==0 {
|
||
|
local temp = substr(`"`temp'"',`=`next_dot'+1',.)
|
||
|
if index(`"`temp'"', ".")~=0 {
|
||
|
local next_dot = index(`"`temp'"',".")
|
||
|
local next_strip = substr(`"`temp'"',1,`=`next_dot'-1')
|
||
|
local strippedname = `"`strippedname'.`next_strip'"'
|
||
|
}
|
||
|
else {
|
||
|
* no change
|
||
|
local last_strip = `"`temp'"'
|
||
|
local change 1
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*** check for manual rtf doc xlm xls csv extensions
|
||
|
if `"`last_strip'"'=="rtf" | `"`last_strip'"'=="doc" {
|
||
|
local word "word"
|
||
|
|
||
|
local file = `"`rabbit'`strippedname'.txt`rabbit'"'
|
||
|
local using = `"using `file'"'
|
||
|
local wordFile "`last_strip'"
|
||
|
}
|
||
|
if `"`last_strip'"'=="xls" | `"`last_strip'"'=="xml" | `"`last_strip'"'=="xlm" | `"`last_strip'"'=="csv" {
|
||
|
local excel "excel"
|
||
|
|
||
|
local file = `"`rabbit'`strippedname'.txt`rabbit'"'
|
||
|
local using = `"using `file'"'
|
||
|
local excelFile "`last_strip'"
|
||
|
}
|
||
|
if `"`last_strip'"'=="tex" {
|
||
|
if `"`tex1'"'=="" {
|
||
|
local tex "tex"
|
||
|
}
|
||
|
|
||
|
local file = `"`rabbit'`strippedname'.txt`rabbit'"'
|
||
|
local using = `"using `file'"'
|
||
|
local texFile "`last_strip'"
|
||
|
}
|
||
|
|
||
|
|
||
|
if `"`last_strip'"'=="txt" {
|
||
|
seeing `pref', `label'
|
||
|
}
|
||
|
else {
|
||
|
if "`using'"=="" {
|
||
|
di in red "must specify using file"
|
||
|
exit 198
|
||
|
}
|
||
|
seeing using `using', `label'
|
||
|
* similar to the other one except the clickable text
|
||
|
*local cl `"{stata `"seeout `pref'"': seeout `pref'}"'
|
||
|
*di as txt `"`cl'"'
|
||
|
}
|
||
|
else {
|
||
|
di in red "must specify the filename (the last preference has expired)"
|
||
|
exit 100
|
||
|
}
|
||
|
}
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
***********************
|
||
|
|
||
|
|
||
|
program define seeing
|
||
|
version 7.0
|
||
|
|
||
|
* invisible to Stata 7
|
||
|
local Version7 ""
|
||
|
cap local Version7 `c(stata_version)'
|
||
|
|
||
|
if "`Version7'"=="" {
|
||
|
* it is version 7
|
||
|
*noi di in yel "limited functions under Stata 7"
|
||
|
}
|
||
|
else if `Version7'>=8.2 {
|
||
|
version 8.2
|
||
|
}
|
||
|
|
||
|
quietly{
|
||
|
* syntax using/[, Clear]
|
||
|
syntax using [, LABel LABelA(string) ]
|
||
|
|
||
|
preserve
|
||
|
|
||
|
insheet `using', nonames clear
|
||
|
describe, short
|
||
|
|
||
|
|
||
|
* number of columns
|
||
|
local numcol = `r(k)'
|
||
|
|
||
|
tempvar blanks rowmiss
|
||
|
count if v1=="EQUATION"
|
||
|
if `r(N)'~=0 {
|
||
|
local eqPlace 1
|
||
|
local varPlace 2
|
||
|
count if v3=="LABELS"
|
||
|
if `r(N)'~=0 {
|
||
|
local labPlace 3
|
||
|
local num=4
|
||
|
}
|
||
|
else {
|
||
|
local labPlace 0
|
||
|
local num=3
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
local eqPlace 0
|
||
|
local varPlace 1
|
||
|
|
||
|
count if v2=="LABELS"
|
||
|
if `r(N)'~=0 {
|
||
|
local labPlace 2
|
||
|
local num=3
|
||
|
}
|
||
|
else {
|
||
|
local labPlace 0
|
||
|
local num=2
|
||
|
}
|
||
|
}
|
||
|
|
||
|
gen int `blanks' = (trim(v`num')=="")
|
||
|
forvalues col = `num'/`numcol' {
|
||
|
replace `blanks' = `blanks' & (trim(v`col')=="")
|
||
|
}
|
||
|
|
||
|
|
||
|
* title rows
|
||
|
local titleWide = 0
|
||
|
if v1[1]~="" | v2[1]~="" {
|
||
|
* there may be a title
|
||
|
if `labPlace'==0 & `varPlace'==1 {
|
||
|
while v1[`=`titleWide'+1']~="" & v2[`=`titleWide'+1']=="" {
|
||
|
local titleWide = `titleWide'+1
|
||
|
}
|
||
|
}
|
||
|
if `labPlace'==0 & `varPlace'==2 {
|
||
|
while v2[`=`titleWide'+1']~="" & v3[`=`titleWide'+1']=="" {
|
||
|
local titleWide = `titleWide'+1
|
||
|
}
|
||
|
}
|
||
|
if `labPlace'~=0 & `varPlace'==1 {
|
||
|
while v1[`=`titleWide'+1']~="" & v3[`=`titleWide'+1']=="" {
|
||
|
local titleWide = `titleWide'+1
|
||
|
}
|
||
|
}
|
||
|
if `labPlace'~=0 & `varPlace'==2 {
|
||
|
while v2[`=`titleWide'+1']~="" & v4[`=`titleWide'+1']=="" {
|
||
|
local titleWide = `titleWide'+1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*local VARIABLES "VARIABLES"
|
||
|
* first name AFTER titles is the VARIABLES
|
||
|
local content
|
||
|
local num=`titleWide'+1
|
||
|
local N=_N
|
||
|
while `"`content'"'=="" & `num'<=`N' {
|
||
|
local content=v`varPlace'[`num']
|
||
|
local num=`num'+1
|
||
|
}
|
||
|
local VARIABLES `"`content'"'
|
||
|
|
||
|
replace `blanks'=0 if v1==`"`VARIABLES'"' | v1[_n-1]==`"`VARIABLES'"' | v2==`"`VARIABLES'"' | v2[_n-1]==`"`VARIABLES'"'
|
||
|
|
||
|
|
||
|
* getting bottomBorder (the bottom border), count up
|
||
|
gen rowmiss=0
|
||
|
foreach var of varlist v* {
|
||
|
replace rowmiss=rowmiss+1 if `var'~=""
|
||
|
}
|
||
|
local N=_N
|
||
|
local content 1
|
||
|
local num 0
|
||
|
while `content'==1 & `num'<`N' {
|
||
|
local content rowmiss[`=`N'-`num'']
|
||
|
local num=`num'+1
|
||
|
}
|
||
|
* do not have to add to titleWide
|
||
|
local bottomRow = `N'-`num'+1
|
||
|
local bottomBorder=`bottomRow'
|
||
|
|
||
|
* getting halfway to headBorder (the top border), count down
|
||
|
local content
|
||
|
local num=`titleWide'+1
|
||
|
local N=_N
|
||
|
while `"`content'"'=="" & `num'<=`N' {
|
||
|
local content=v`varPlace'[`num']
|
||
|
local num=`num'+1
|
||
|
}
|
||
|
* do not have to add to titleWide
|
||
|
local headRow `num'
|
||
|
local headBorder=`headRow'
|
||
|
|
||
|
drop rowmiss
|
||
|
|
||
|
|
||
|
* avoid counting space within each statistics row as missing
|
||
|
replace `blanks'=0 if `blanks'[_n+1]==0 & `blanks'==1 & _n >`titleWide'
|
||
|
|
||
|
|
||
|
* statistics rows
|
||
|
*count if `blanks'==0
|
||
|
*local bottomBorder = `r(N)'+`titleWide'
|
||
|
|
||
|
|
||
|
* move the notes and titles to the top of a new column
|
||
|
gen str5 Notes_Titles=""
|
||
|
format Notes_Titles %-20s
|
||
|
count if v1=="EQUATION"
|
||
|
if `r(N)'==0 {
|
||
|
* EQUATION column does not exist
|
||
|
if `titleWide'>0 {
|
||
|
forval num=1/`titleWide' {
|
||
|
replace Notes_Titles=v1[`num'] in `num'
|
||
|
replace v1="" in `num'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
local one = 1
|
||
|
local legend = v1[`bottomBorder'+`one']
|
||
|
|
||
|
|
||
|
local place 1
|
||
|
*while "`legend'"~="" {
|
||
|
local N=_N
|
||
|
while `place' <= `N' {
|
||
|
local place=`bottomBorder'+`one'
|
||
|
local legend = v1[`place']
|
||
|
replace Notes_Titles="`legend'" in `=`one'+`titleWide'+1'
|
||
|
if "`legend'"~="" {
|
||
|
replace v1="" in `place'
|
||
|
}
|
||
|
local one = `one'+1
|
||
|
}
|
||
|
|
||
|
* insert label changes here, minus 2 from c(k) for `blanks' & Notes_Titles column
|
||
|
if "`label'"=="label" {
|
||
|
*if ("`long'"~="long" & "`onecol'"~="onecol") | ("`long'"=="long" & "`onecol'"=="onecol") {
|
||
|
replace v2=v1 if v2==""
|
||
|
drop v1
|
||
|
describe, short
|
||
|
forval num=1/`=`r(k)'-2' {
|
||
|
ren v`=`num'+1' v`num'
|
||
|
}
|
||
|
|
||
|
* change LABELS to VARIABLES
|
||
|
replace v1=`"`VARIABLES'"' if v1=="LABELS"
|
||
|
*}
|
||
|
local label_adjust "-1"
|
||
|
}
|
||
|
|
||
|
* change the string length
|
||
|
gen str5 temp=""
|
||
|
replace temp=v1
|
||
|
drop v1
|
||
|
ren temp v1
|
||
|
order v1
|
||
|
* format
|
||
|
foreach var of varlist v1 {
|
||
|
local _format= "`: format `var''"
|
||
|
local _widths=substr("`_format'",2,length(trim("`_format'"))-2)
|
||
|
format `var' %-`_widths's
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
* equation column exists
|
||
|
if `titleWide'>0 {
|
||
|
forval num=1/`titleWide' {
|
||
|
replace Notes_Titles=v2[`num'] in `num'
|
||
|
replace v2="" in `num'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
local one = 1
|
||
|
local legend = v2[`bottomBorder'+`one']
|
||
|
while "`legend'"~="" {
|
||
|
local place=`bottomBorder'+`one'
|
||
|
local legend = v2[`place']
|
||
|
replace Notes_Titles="`legend'" in `=`one'+`titleWide'+1'
|
||
|
if "`legend'"~="" {
|
||
|
replace v2="" in `place'
|
||
|
}
|
||
|
local one = `one'+1
|
||
|
}
|
||
|
|
||
|
* insert label changes here, minus 2 from c(k) for `blanks' & Notes_Titles column
|
||
|
if "`label'"=="label" {
|
||
|
*else if "`long'"~="long" & "`onecol'"=="onecol" {
|
||
|
replace v3=v2 if v3==""
|
||
|
drop v2
|
||
|
describe, short
|
||
|
forval num=2/`=`r(k)'-2' {
|
||
|
ren v`=`num'+1' v`num'
|
||
|
}
|
||
|
|
||
|
* change LABELS to VARIABLES
|
||
|
replace v2=`"`VARIABLES'"' if v2=="LABELS"
|
||
|
*}
|
||
|
local label_adjust "-1"
|
||
|
}
|
||
|
|
||
|
|
||
|
* change the string length
|
||
|
gen str5 temp=""
|
||
|
replace temp=v2
|
||
|
drop v2
|
||
|
ren temp v2
|
||
|
order v1 v2
|
||
|
* format
|
||
|
foreach var of varlist v1 v2 {
|
||
|
local _format= "`: format `var''"
|
||
|
local _widths=substr("`_format'",2,length(trim("`_format'"))-2)
|
||
|
format `var' %-`_widths's
|
||
|
}
|
||
|
}
|
||
|
|
||
|
* clean up
|
||
|
*egen `rowmiss'=rowmiss(_all)
|
||
|
* rowmiss option not available in 8.2 or 8.0, do it by hand
|
||
|
|
||
|
gen `rowmiss'=0
|
||
|
foreach var of varlist _all {
|
||
|
if "`var'"~="`rowmiss'" & "`var'"~="`blanks'" {
|
||
|
replace `rowmiss'=1+`rowmiss' if `var'==""
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*drop if `rowmiss'==`numcol'+1
|
||
|
|
||
|
* adjust to handle label column droppings
|
||
|
*drop if `rowmiss'==`numcol'+1 & `blanks'==1
|
||
|
|
||
|
* fix blanks==1 for groupvar( )
|
||
|
count if `blanks'==1
|
||
|
local rN=`r(N)'+1
|
||
|
forval num=1/`rN' {
|
||
|
replace `blanks'=0 if `blanks'[_n+1]==0 & `blanks'==1
|
||
|
}
|
||
|
|
||
|
drop if `rowmiss'==`numcol'+1 `label_adjust' & `blanks'==1
|
||
|
drop `blanks' `rowmiss'
|
||
|
|
||
|
browse
|
||
|
|
||
|
if "`Version7'"=="" {
|
||
|
* it is version 7
|
||
|
}
|
||
|
else if `Version7'>=11.0 {
|
||
|
noi di in yel "Hit Enter to continue" _request(junk)
|
||
|
}
|
||
|
|
||
|
*restore, preserve
|
||
|
}
|
||
|
end /* end of seeing */
|
||
|
|
||
|
exit
|
||
|
|
||
|
|
||
|
|
||
|
* versions
|
||
|
1.1 replaced rowmiss option in egen, which is not available in 8.2
|
||
|
1.1.1 disabled -restore, preserve- as redundant waste of time
|
||
|
fixed seeing/seeout: handles blank space in stat(aster)
|
||
|
label does not show
|
||
|
no longer produces a seeout blue text whenever a seeout blue text was clicked
|
||
|
1.1.2 the shorthand form of seeout hides label
|
||
|
1.1.3 the shorthand form of seeout hides label: `label' is actually read from outreg2_pref.ado
|
||
|
1.2.0 down to version 7.0; -describe, short- instead of c(k)
|
||
|
if `"`using'"'~="": needed the compound quotes
|
||
|
VARIABLES is flexibly named
|
||
|
1.2.1 Apr2009 handles xls, doc, etc, that was left attached to file names in pref_ado
|
||
|
1.2.2 04Aug2009 a fix for asynchronoous data browser in -seeing- for version 11
|
||
|
1.2.3 21oct2009 outreg2_pref should have been replaced with outreg2.pref earlier
|
||
|
|