-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStata codes
97 lines (87 loc) · 3.5 KB
/
Stata codes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Created by: Waiguru Muriuki
Email: waigurusamuel@gmail.com
Date : 16/03/2021
Affiliation: Evidence Action
*/
cap program drop tabgen
program define tabgen,
pause on
version 15.0
syntax varlist (max=1) [,mi ///
missing ///
range(string) ///
VALuelabel(string)]
local var `varlist'
if "`range'" == "" {
local range 1(1)20
}
if "`other'" == "" {
local other -996
}
if "`missing'" == "" {
local missing -998 -999
}
qui labellist `var'
if "`valuelabel'" == "" {
local valuelabel "`r(lblname)'"
}
***************************************************************************************************************
***Checking whether the primary variable is string or numeric if string exit
qui destring `var',replace
if substr("`:type `var''" , 1, 3)== "str" {
di as err "Only works with numeric variables, preferably with value labels"
exit 198
}
****************************************************************************************************************
***Confirming whether the variable, used for this program, exist in the data set.
forval lo=1(1)20 {
foreach varo in `var'_`lo' `var'_`lo' {
capture confirm variable `varo', exact
if _rc==0 {
di in red "Drop and regenerate the `var'_? variables"
exit 198
}
}
}
****************************************************************************************************************
forval x=`range'{
qui gen `var'_`x' = .
qui replace `var'_`x' = 0 if `var'!=.
qui replace `var'_`x' = 1 if inlist( `var',`x')
if "`valuelabel'" != "" {
local varname "`:label `valuelabel' `x''"
label var `var'_`x' "`varname'"
}
}
**************************************************************************************************************************
foreach x in `other' {
local abs_x = subinstr("`x'", "-", "", 1)
qui gen `var'_`abs_x' = .
qui replace `var'_`abs_x' = 0 if `var'!=.
qui replace `var'_`abs_x' = 1 if inlist( `var',`other')
if "`valuelabel'" != "" {
local varname "`:label `valuelabel' `x''"
label var `var'_`abs_x' "`varname'"
}
}
****************************************************************************************************************************
foreach xx in `missing' {
local abs_x = subinstr("`xx'", "-", "", 1)
qui gen `var'_`abs_x' = .
qui replace `var'_`abs_x' = 0 if `var'!=.
qui replace `var'_`abs_x' = 1 if inlist( `var',`xx')
if "`valuelabel'" != "" {
local varname "`:label `valuelabel' `xx''"
label var `var'_`abs_x' "`varname'"
}
}
***************************************************************************************************************
foreach vv of varlist `var'_* {
qui sum `vv'
if r(mean) == 0 & r(max) == 0 & r(min) == 0 {
drop `vv'
di in green "`vv' dropped because all values were zero or missing"
}
}
end