-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrcsgen2.ado
54 lines (45 loc) · 1.37 KB
/
rcsgen2.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
program define rcsgen2, rclass
version 10.0
syntax [varlist(default=none)] [if] [in] , [ ///
Gen(string) ///
Knots(numlist) ///
RMATrix(name) ///
]
marksample touse
quietly gen double `gen'1 = 0 if `touse'
local d2rcslist `gen'1
local nk : word count `knots'
if "`knots'" == "" {
local interior = 0
}
else {
local interior = `nk' - 2
}
local nparams = `interior' + 1
if "`knots'"!="" {
local i = 1
tokenize "`knots'"
while "``i''" != "" {
local k`i' ``i''
local i = `i' + 1
}
local kmin = `k1'
local kmax = `k`nk''
forvalues j=2/`nparams' {
local lambda = (`kmax' - `k`j'')/(`kmax' - `kmin')
quietly gen double `gen'`j' = (6*(`varlist'- `k`j''))*(`varlist'>`k`j'') - ///
`lambda'*(6*(`varlist'-`kmin'))*(`varlist'>`kmin') - ///
(1-`lambda')*(6*(`varlist'-`kmax'))*(`varlist'>`kmax')
local d2rcslist `d2rcslist' `gen'`j'
}
}
/* orthogonlise */
if "`rmatrix'" != "" {
tempname Rinv
matrix `Rinv' = inv(`rmatrix')
mata st_store(.,tokens(st_local("d2rcslist")), ///
"`touse'",st_data(.,tokens(st_local("d2rcslist")), ///
"`touse'")*st_matrix("`Rinv'")[1..`nparams',1..`nparams'])
}
return local d2rcslist `d2rcslist'
end