⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codebook.ado

📁 是一个经济学管理应用软件 很难找的 但是经济学学生又必须用到
💻 ADO
📖 第 1 页 / 共 3 页
字号:
		return scalar Var   = .
		exit
	}

	tempname max mean min p Var
	qui summ `v' if `touse'
	scalar `min'  = r(min)
	scalar `max'  = r(max)
	scalar `mean' = r(mean)
	scalar `Var'  = r(Var)

	// v constant
	capture assert missing(`v') | (`Var' == 0)  if `touse'
	if _rc == 0 {
		return scalar units = 1      // current behavior
		return scalar min   = `min'
		return scalar max   = `max'
		return scalar mean  = `mean'
		return scalar Var   = `Var'
		exit
	}

	// determine unit
	scalar `p' = 1
	capture assert float(`v') == float(round(`v',1)) if `touse'
	if _rc == 0 {
		while _rc == 0 {
			scalar `p' = `p'*10
			capture assert float(`v') == float(round(`v',`p')) if `touse'
		}
		scalar `p' = `p'/10
	}
	else {
		while _rc {
			scalar `p' = `p'/10
			capture assert float(`v') == float(round(`v',`p')) if `touse'
		}
	}
	return scalar units = `p'
	return scalar min   = round(`min',`p')
	return scalar max   = round(`max',`p')
	return scalar mean  = `mean'
	return scalar Var   = `Var'
end


program Piece
	args color col len str

	local piece : piece 1 `len' of `"`macval(str)'"'
	dis as `color' `"`macval(piece)'"'

	local i 2
	local piece : piece 2 `len' of `"`macval(str)'"'
	while `"`macval(piece)'"' != "" {
		dis as `color' _col(`col') `"`macval(piece)'"'
		local ++i
		local piece : piece `i' `len' of `"`macval(str)'"'
	}
end


program Header
	syntax [, LANGuages(str) Notes]

	dis _n as txt _col(16) "Dataset:  " _c
	if `"$S_FN"' == "" {
		dis as txt "[unnamed]"
	}
	else {
		_shortenpath `"$S_FN"' , len(`=c(linesize)-28')
		dis as res `"`r(pfilename)'"'
	}

	dis as txt _col(13) "Last saved:  " _c
	if `"$S_FN"' == "" {
		dis as txt "never"
	}
	else if `"$S_FNDATE"' == "" {
		dis as txt "unknown"
	}
	else {
		dis as res `"$S_FNDATE"'
	}

	if `"$S_FN"' != "" {
		qui des, short
		if r(changed) {
			dis as txt _col(26) "DATA HAVE CHANGED SINCE LAST SAVED"
		}
	}
	dis

	quiet label language
	local cln `r(language)'
	local lns `r(languages)'
	local nln : list sizeof languages

	if "`lns'" != "default" {
		dis "{p 3 26 2}{txt:Available languages:}{space 2}{res:`lns'}{p_end}"
		if `nln' > 0 {
			dis "{p 4 26 2}{txt:Codebook languages:}{space 2}{res:`languages'}{p_end}"
		}
		else if `nln' == 0 {
			dis "{col 6}{txt:Codebook language:}  {res:`cln'}"
		}
		dis
	}

	if "`languages'" == "" {
		local x : data label
		if `"`x'"' == "" {
			local x "[none]"
		}
		dis as txt _col(18) "Label:" as res `"  `x'"'
	}
	else {
		foreach ln of local languages {
			if "`ln'" == "`cln'" {
				local x : data label
			}
			else {
				local x : char _dta[_lang_v_`ln']
			}
			if `"`x'"' == "" {
				local x "[none]"
			}
			dis as txt "{ralign 22:Label in `ln'}:" as res `"  `x'"'
		}
		dis
	}

	capture memory
	if _rc {
		if _rc == 1 {
			exit 1
		}
		local ptrsize 4
	}
	else {
		local ptrsize = r(size_ptr)
	}

	quietly desc, short
	dis _col(4)  as txt "Number of variables:  "       ///
	             as res trim(string(r(k),"%16.0gc"))
	dis _col(1)  as txt "Number of observations:  "    ///
	             as res trim(string(r(N),"%16.0gc"))
	dis _col(19) as txt "Size:  "                      ///
	             as res trim(string((r(width)+`ptrsize')*r(N),"%16.0gc")) ///
	             as txt " bytes ignoring labels, etc."

	if "`notes'" != "" {
		notes _dta
	}
end


/* VarHeader v
   displays the header for the report on variable v
*/
program VarHeader
	syntax varname [, LANGuages(str)]

	local v `varlist'
	local vname `v'
	if "`languages'" != "" {
		dis _n "{txt}{hline}"
		foreach ln of local languages {
			if "`ln'" == "`:char _dta[_lang_c]'" {
				local lbl : variable label `v'
			}
			else {
				local lbl : char `v'[_lang_v_`ln']
			}
			if `"`lbl'"' == "" {
				local lbl "(unlabeled)"
			}

			local len = length("`vname'`ln'")
			if `len' < 22 {
				local sp `"{space `=19-`len''}"'
				dis `"{p 0 25}{res}`vname'`sp'{txt:in `ln':}{space 2}{res:`lbl'}{p_end}"'
			}
			else {
				local sp `"{space `=22-length("in `ln'")'}"'
				dis "{res:`vname'}" _n ///
				    `"{p 0 25}`sp'{txt:in `ln':}{space 2}{res:`lbl'}{p_end}"'
			}
			local vname
		}
		dis "{txt}{hline}" _n
	}
	else {
		local lbl : variable label `v'
		if `"`lbl'"' == "" {
			local lbl "(unlabeled)"
		}
		dis _n "{txt}{hline}"
		if length("`vname'") + length(`"`lbl'"')  < `c(linesize)'-2 {
			dis `"{res}`vname'{right:`lbl'}"'
		}
		else {
			local sp = "{space `=39-length("`v'")'}"
			dis `"{p 0 39}{res}`vname'`sp'`lbl'{p_end}"'
		}
		dis "{txt}{hline}" _n
	}
end


/* ReportProblems
   creates a report on potential problems in the data
*/
program ReportProblems

	if `"$S_FN"' == "" {
		local dataset "[unnamed]"
	}
	else {
		_shortenpath `"$S_FN"' , len(`=c(linesize)-36')
		local dataset `"`r(pfilename)'"'

		qui des, short
		if r(changed) {
			global T_cb_datachanged 1
		}
	}

	// len := max of varlists to be displayed
	local len 0
	foreach source in cons labelnotfound notlabeled str_type ///
	                  str_leading str_trailing str_embedded realdate {
		local len = max(`len',`: length global T_cb_`source'')
	}
	if  `len' == 0 {
		dis _n ///
		`"{txt}no potential problems in dataset {res}`dataset'"'
		exit
	}

	dis _n `"{txt}   Potential problems in dataset   {res}`dataset'"' _n

	// if "$T_cb_datachanged" != "" {
	//	dis as txt "    data changed since last saved" _n
	// }

	local hlen = clip(35+`len', 50, c(linesize))

	dis as txt _col(16) "potential problem   variables"
	dis as txt "{hline `hlen'}"

	Msg  cons           "constant (or all missing) vars"
	Msg  labelnotfound  "vars with nonexisting label"
	Msg  notlabeled     "incompletely labeled vars"
	Msg  str_type       "strvars that may be compressed"
	Msg  str_leading    "string vars with leading blanks"
	Msg  str_trailing   "string vars with trailing blanks"
	Msg  str_embedded   "string vars with embedded blanks"
	Msg  realdate       "noninteger valued date vars"

	dis as txt "{hline `hlen'}"
end


/* Msg mac txt
   display utility for Problems
*/
program Msg
	args mac txt

	if `"${T_cb_`mac'}"' == "" {
		exit
	}

	local len = 32 - length(`"`txt'"')
	dis as txt `"{p 0 35}{space `len'}`txt'{space 3}"' ///
	    as res "${T_cb_`mac'}" "{p_end}"
end


program ReturnGlobals, rclass
	local macros  datachanged   cons          labelnotfound ///
		      notlabeled    str_type      str_leading   ///
		      str_trailing  str_embedded  realdate

	foreach r of local macros {
		return local `r' `"${T_cb_`r'}"'
	}
end


program ParseLanguage, sclass
	args languages languages2

	if "`languages'" != "" & `"`languages2'"' != "" {
		dis as err "options languages and languages() may not be combined"
		exit 198
	}

	quiet label language
	local cln  `r(language)'
	local dlns `r(languages)'

	if ("`languages'" != "") | (`"`languages2'"' == "_all") {
		local lns `dlns'
	}
	else if `"`languages2'"' != "" {
		local notfound : list languages2 - dlns
		if "`notfound'" != "" {
			dis as err "languages() invalid; `notfound' not defined"
			exit 100
		}
		local lns : list uniq languages2
	}

//	if "`lns'" == "default" {
//		local lns
//	}

	sreturn clear
	sreturn local lns `lns'
end

program define DoTab1, rclass
	args v touse lbl
	preserve
	qui sum `v'
	if r(N) > 0 {
		contract `v' if `touse' & !missing(`v')
		local n = _N
		local uncoded = 0
		forvalues i = 1/`n' {
			local c = `v'[`i']
			local s : label `lbl' `c'
			if ("`s'" == "`c'")  local ++uncoded
		}
	
		if `uncoded' > 0 {
			dis as txt ", but {res:`uncoded'} nonmissing value" ///
			cond(`uncoded'==1," is", "s are") " not labeled"
			global T_cb_notlabeled  $T_cb_notlabeled `v'
		}
		else {
			dis
		}
		return local exist = 1
	}
	else {
		return local exist = 0
	}
	
	restore

end

program define DoTab2, rclass
	args v touse nlbl cwidth notshown
	preserve
	contract `v' if `touse' 
	qui sum `v'	
	local n = _N
	forvalues i = 1 / `n' {
		local c = `v'[`i']
		if `nlbl' == 1 {
			dis _col(24) as res %7.0g _freq[`i']   ///
			    _col(33) as res %8.0g `c'            ///
			    _col(43) as txt _c
			local s : label `1' `c'
			if `"`macval(s)'"' != "`c'" {
				Piece txt  43 32 `"`macval(s)'"'
			}
			else display
		}
		else {
			dis _col(24) as res %7.0g _freq[`i']   ///
			    _col(31) as res %8.0g `c'            ///
			    _col(42) as txt _c
			forvalues j = 1 / `nlbl' {
				local s : label ``j'' `c' `cwidth'
				if (`"`macval(s)'"' == "`c'") local s ""
				dis as res `"{lalign `cwidth':`macval(s)'}"' _c
				if (`j'<`nlbl')  dis _skip(3) _c
			}
			dis
		}
	}
	if "`notshown'" != "" {
			dis as txt _n "(value labels `notshown' are not listed)"
	}
		
	restore
end



exit


GLOBALS USED FOR VARLISTS WITH POTENTIAL PROBLEMS

  T_cb_datachanged          flags data have changed since last saved

  T_cb_cons                 vars that are constant or missing
  T_cb_labelnotfound        vlabeled vars with nonexisting label
  T_cb_notlabeled           vlabeled vars with unlabeled values
  T_cb_str_type             strvars which may be compressed
  T_cb_str_leading          strvars with leading blanks
  T_cb_str_trailing         strvars with trailing blanks
  T_cb_str_embedded         strvars with embedded blanks
  T_cb_realdate             noninteger valued date variables


DISPLAY FORMATS

longlong ------------------------------------------ average january temperature
	          type:  numeric (int)
	         label:  gould, but 2 values are not labeled
	         range:  [xxx,xxx]
	         units:  1
	 unique values:  5
	 coded missing:  72
            Tabluation:  Freq.   Numeric  label
		       xxxxxxx  xxxxxxxx  (none)
		       1234567  12345678
 Or:
            Tabluation:  Freq.  value
		        xxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

         1         2         3
12345678901234567890123456789012345678901234
               Warning:  variable has leading, trailing, embedded blanks


HISTORY

1.3.13 bug fix default language
1.3.12 now display multiple value labels
1.3.11 multiple languages
1.3.10 added support for if/in
1.3.4  made codebook sort-stable
1.3.2  added -problems-
1.3.1  ported to version 8
       added support for extended missing values

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -