如何逐行从变量中随机选数存入新变量lot?原方法因变量非宏失效
Stata:逐行从多变量中随机选取值的解决方案
嘿,针对你需要从每个观测的lottery1到lottery5里随机挑一个值存入新变量lot的需求,我给你两种实用的方法,都不用纠结宏的问题:
方法1:用egen rowrnd一步到位(强烈推荐)
Stata的egen命令里有个rowrnd函数,专门干这个事儿——它会自动遍历每一行,从你指定的变量列表里随机选一个值生成新变量。代码超简洁:
egen lot = rowrnd(lottery1 lottery2 lottery3 lottery4 lottery5)
执行完这个命令,lot变量就已经是每一行随机选取的结果了,完全符合你的要求,连额外的步骤都省了。
方法2:手动生成随机列索引(适合需要追踪过程的场景)
如果你想清楚看到随机选择的逻辑,也可以先给每一行生成一个1到5的随机整数(代表要选第几个lottery变量),再根据这个索引取值:
* 生成1-5的随机整数,标记要选的列 gen col_index = runiformint(1, 5) * 根据索引提取对应变量的值 gen lot = . replace lot = lottery1 if col_index == 1 replace lot = lottery2 if col_index == 2 replace lot = lottery3 if col_index == 3 replace lot = lottery4 if col_index == 4 replace lot = lottery5 if col_index == 5 * 要是不需要保留索引变量,直接删掉就行 drop col_index
验证效果
你可以用下面的命令查看前10行的结果,确认随机选取是否正常工作:
list lottery1-lottery5 lot in 1/10
这样就能直观看到每个观测的lot值确实来自该行的5个lottery变量之一啦。
内容的提问来源于stack exchange,提问作者user12086936
相关产品推荐
相关产品推荐

