2015-07-10 197 views
0

我正在嘗試在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對於一個給定的觀察結果是三個,我會希望循環執行三次。

//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

在我看來,這是一個會從廣泛的重塑你的數據方面的問題長。 – 2015-07-10 19:43:29

回答

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