Loops 以变量作为Stata中的上限的循环
我试图在stata中创建一个循环,它的上限是一个变量,而不是一个数字或局部宏 例如,如果num_tests是我想要的循环的上限:Loops 以变量作为Stata中的上限的循环,loops,statistics,stata,Loops,Statistics,Stata,我试图在stata中创建一个循环,它的上限是一个变量,而不是一个数字或局部宏 例如,如果num_tests是我想要的循环的上限: forval i = 1/num_tests{ //Do things here } 我尝试使用本地宏执行此操作: local j = num_tests forval i = 1/`j'{ //Do stuff } 然而,这只适用于第一次观察,并没有继续迭代其他观察。基本上,我希望for循环迭代一定次数,正如num_tests变量所指定的那样。我
forval i = 1/num_tests{
//Do things here
}
我尝试使用本地宏执行此操作:
local j = num_tests
forval i = 1/`j'{
//Do stuff
}
然而,这只适用于第一次观察,并没有继续迭代其他观察。基本上,我希望for循环迭代一定次数,正如num_tests变量所指定的那样。我知道我可能可以在循环中使用_N并以这种方式访问值,但据我所知,这是非常低效的,不推荐使用
更新:如果有帮助,这里有一些示例代码。num_tests是数据集中的一个变量,它的值介于1和6之间,具体取决于观察结果。因此,如果给定观测值的num_测试是三次,我希望循环执行三次
//Find results of only the first lab tests
forval i = 1/num_tests{
replace val = `i' if `i' > val
//Set tTG IgA results
replace ttg_iga_result = real(test_result_`i') / real(high_ref_range_`i') if performed_test_cd_`i' == "5003030" | performed_test_cd_`i' == "9503207"
//Set tTG IgG results
replace ttg_igg_result = real(test_result_`i') / real(high_ref_range_`i') if performed_test_cd_`i' == "5003025" | performed_test_cd_`i' == "9503200"
//Set regular IgA results - if variable is > 1, then the patient has low IgA levels
replace iga_result = real(test_result_`i') if performed_test_cd_`i' == "1002860"
}
任何帮助都将不胜感激
谢谢你抽出时间,
内特我最后只是用_N让它工作:
//Local to hold total number of observations
local N = _N
forval j = 1/`N' {
local num = num_tests[`j']
forval i = 1/`num' {
//Set tTG IgA results
replace ttg_iga_result = real(test_result_`i') / real(high_ref_range_`i') in `j' if performed_test_cd_`i' == "5003030" | performed_test_cd_`i' == "9503207"
//Set tTG IgG results
replace ttg_igg_result = real(test_result_`i') / real(high_ref_range_`i') in `j' if performed_test_cd_`i' == "5003025" | performed_test_cd_`i' == "9503200"
//Set regular IgA results - if variable is > 1, then the patient has low IgA levels
replace iga_result = real(test_result_`i') in `j' if performed_test_cd_`i' == "1002860"
}
}
在我看来,这是一个问题,将数据从宽到长进行重塑将有助于解决这个问题。