循环使用变量作为Stata的上限

时间:2015-07-10 19:06:58

标签: 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变量所指定的那样。我理解我可以在循环中使用_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" 
}

非常感谢任何帮助。

谢谢你的时间, 内特

1 个答案:

答案 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" 
    }
}