1 Star 0 Fork 2

wxq8888wxq/statamacroe

forked from kerrydu/statamacroe 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
permutec.ado 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
kerrydu 提交于 2022-03-19 15:50 . placebonew
cap program drop permutec
program define permutec
version 14
_on_colon_parse `0'
local command `"`s(after)'"'
local 0 `"`s(before)'"'
_parse_policy `0'
local cluster `"`r(cluster)'"'
local tvar `"`r(tvar)'"'
local treatment `"`r(treatment)'"'
local cmd `"`r(cmd)'"'
cap which gtools
if _rc==0 local g g
tempvar id time posin flag
if `"`tvar'"'==""{
*tempvar time
qui gen byte `time'=1
}
else{
*tempvar time
qui `g'egen `time'=group(`tvar')
}
*tempvar id
if `"`cluster'"'==""{
qui gen `id'=_n
}
else{
qui `g'egen `id' = group( `cluster')
}
qui `g'egen `posin' =group(`id' `time')
qui `g'sort `posin'
qui putmata _posin00 =`posin',replace
qui bys `posin' : gen byte `flag' = (_n==1)
qui putmata _data00=(`id' `time' `treatment' 1) if `flag',replace
mata: _nn00=max(_data00[.,1])
mata: _tt00=max(_data00[.,2])
mata: _balancedata00 = fillpanel(_data00)
global randomvars `treatment'
simulate `cmd': permutecin `command'
//cap mata drop _nn00 _tt00 data00 balancedata00
end
cap program drop _parse_policy
program define _parse_policy,rclass
syntax [anything(name=exp_list equalok)] ///
[fw iw pw aw] [if] [in], TReatment(varlist) [Cluster(varlist) TVar(varname) *]
tokenize `"`0'"', p(",")
local cmd `1', `options'
return local treatment `treatment'
return local cluster `cluster'
return local tvar `tvar'
return local cmd `cmd'
end
mata:
real matrix function fillpanel(real matrix data0)
{
id= uniqrows(data0[.,1])
t = uniqrows(data0[.,2])
if(rows(data0[.,1])==length(id)*length(t)){
return(data0)
exit()
}
c = cols(data0)
balancedata= (id#J(length(t),1,1),J(length(id),1,1)#t,J(length(id)*length(t),c-2,.)),J(length(id)*length(t),1,1)
balancedata = (data0,J(rows(data0),1,0)) \balancedata //加入最后一列 0 /1 排序用
c=c+1
_sort(balancedata,(1,2,c))
x1=balancedata[,1..2]
// use the first obs in id-t group
x2=x1[rows(x1),.] \ x1[1::(rows(x1)-1),.]
//balancedata,x2
fdata=select(balancedata,rowsum(x1:==x2):!=cols(x1)) //不相等就是面板的第一行
data1=fdata[.,1..(c-1)]
return(data1)
}
end
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
其他
1
https://gitee.com/wxq8888wxq/statamacroe.git
[email protected]:wxq8888wxq/statamacroe.git
wxq8888wxq
statamacroe
statamacroe
master

搜索帮助