-
Notifications
You must be signed in to change notification settings - Fork 1
/
primus_check.ado
117 lines (100 loc) · 2.37 KB
/
primus_check.ado
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
cap program drop primus_check
program define primus_check, rclass
version 11.0
syntax, country(string) verm(string) vera(string) year(numlist int max=1 >1900) ///
module(string)
local toup country svy module
foreach x of local toup{
if ("``x''"!="") local `x' =trim(upper("``x''"))
}
foreach x of varlist *{
local tocheck `tocheck' `x'
}
cap isid hhid
local hhlev =_rc==0
if (`hhlev'!=1){
cap isid hhid pid
if (_rc==0){
sort hhid pid
}
else{
dis as error "Data is not at hh or individual level"
error 2343
exit
}
}
else sort hhid
tempfile current
save `current'
cap datalibweb, country(`country') year(`year') verm(`verm') vera(`vera') module(`module') type(gmd) clear nocpi
local nogo = _rc
cap drop cpi*
cap drop icp*
cap drop ppp*
cap drop datalevel
cap replace countrycode=upper(countrycode)
if (`nogo'==0){
cap rename weight weight_h
qui: count
local NN=r(N)
foreach x of varlist *{
qui: count if missing(`x')
local NNn=r(N)
if (`NN'!=`NNn') local tocheckn `tocheckn' `x'
}
cap isid hhid
local hhlev =_rc==0
if (`hhlev'!=1){
cap isid hhid pid
local indivlev = _rc==0
if (`indivlev'==1){
sort hhid pid
}
else{
dis as error "Data is not at hh or individual level"
error 2343
exit
}
}
else{
sort hhid
}
//Check if there are vars in tocheckn not in tocheck
local notin: list tocheckn - tocheck
if ("`notin'"!=""){
display as error "Data is different, the following variables are in existing vintage" ///
_n "that are not in the new data, overwrite is not possible"
noi dis as error "`notin'"
error 12111
exit
}
else{
local check: list tocheckn & tocheck
local cfrc=0
foreach bb of local check{
cap cf `bb' using `current', all
local works = _rc
if (`works'!=0){
local diffvars `diffvars' `bb'
}
local cfrc = `works' + `cfrc'
}
if `cfrc'==0{
return local proceed = 1
}
else{
display as error "The following variables do not match, please check: " ///
_n "`diffvars'"
return local proceed = 0
}
}
use `current', clear
}
else{
use `current', clear
display as error "I was unable to call"
noi dis in yellow "datalibweb, country(`country') year(`year') verm(`verm') vera(`vera') module(`module') type(gmd) clear"
error 12111
exit
}
end