- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 2984 个
- 通用积分
- 407.5325
- 学术水平
- 73 点
- 热心指数
- 72 点
- 信用等级
- 62 点
- 经验
- 1206 点
- 帖子
- 51
- 精华
- 0
- 在线时间
- 131 小时
- 注册时间
- 2011-4-7
- 最后登录
- 2025-3-17
已卖:1516份资源
硕士生
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 2984 个
- 通用积分
- 407.5325
- 学术水平
- 73 点
- 热心指数
- 72 点
- 信用等级
- 62 点
- 经验
- 1206 点
- 帖子
- 51
- 精华
- 0
- 在线时间
- 131 小时
- 注册时间
- 2011-4-7
- 最后登录
- 2025-3-17
 | 开心 2019-1-20 22:23:55 |
|---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
- /*
- 问题需求:
- 一个地区16个村,8个村为干预,8个村为对照,
- 考察所有随机化分组的基线变量平衡情况
- 从K个村里任选c个村,有k!/(c!*(k-c)!)种
- 解决思路:
- 我们只需要知道干预组和对照组,用0和1表示即可,这样可以不用计算16的阶乘
- 只用考虑16个变量,每个变量包含2个元素1和0,这16个变量的组合,2的16次方
- 然后再删除行合计不等于8的即可
- 优势:
- 1. 突破percom等命令包中因为排列计算过大对选取数c的限制
- 2. 突破被选取数k太大,造成的内存不足限制
- 3. 可以生成原始数值的组合或者指示变量的分组
- */
- clear
- local k=6 // 从k个数中一次性选取c个数
- local c=2
- di "组合数:" exp(lnfactorial(`k'))/(exp(lnfactorial(`c'))*exp(lnfactorial(`k'-`c')))
- set obs 2
- forvalues i=1/`k'{
- gen v`i'=1 in 1
- replace v`i'=0 in 2
- }
- di "记录数:" 2^`k'
- fillin v* // 2^k条记录数,受电脑内存限制
- // 以下代码生成指示变量的分组
- egen rt=rowtotal(v1-v`k')
- drop if rt!=`c' // 删除不需要的组合数
- drop _fillin rt
- d,s
- // 以下代码继续生成带原始数值的组合
- forvalues i=1/`k' {
- gen t`i'="`i'" if v`i'==1
- }
- egen cv=concat(t1-t`k'),punct(" ")
- replace cv=strtrim(stritrim(cv))
- keep cv
- split cv,generate(v) destring
- drop cv
- compress
复制代码
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|
|
|