我试图在stata中创建一个循环,它将变量而不是数字或本地宏作为上限。
例如,如果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_tests为3,我希望循环执行三次。
//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"
}
非常感谢任何帮助。
谢谢你的时间, 内特
答案 0 :(得分:0)
我最终只是使用_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"
}
}