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

7 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