出于调试目的显示或打印循环变量

Display or print loop variable for debugging purposes

ID  A1  A2  A3
1001    ABD AAA ABC
1002    ABE BBB CCC
1003    ABC CCC DDD

我有一个循环如下:

generate trackr = 0
display "generated trackr"
foreach var of varlist a1 a2 a3{
    display "`var'" id[_n]
    replace trackr = 1 if (`var'=="ABC")
}

在 Stata 中,我想在对 trackr 进行更改时找出并打印出来。 (我想知道 row/column "ABC" 是在哪个地方被发现的。)

我试过上面的方法 id[_n] 但它只部分起作用。

我只想显示 id[_n] if var=="ABC"trackr 更改为 1(从 0)。我尝试将所有内容都放在 if 块中,但我认为 Stata 中的 if 工作方式不同?

您似乎想要的东西不需要循环。有关在 Stata 问题中提供示例数据的更好方法,请参阅 SSC 的 dataex

clear
input ID  str3 (A1  A2  A3) 
1001    ABD AAA ABC
1002    ABE BBB CCC
1003    ABC CCC DDD
end 

gen trackr = inlist("ABC", A1, A2, A3) 
list if inlist("ABC", A1, A2, A3) 

     +---------------------------------+
     |   ID    A1    A2    A3   trackr |
     |---------------------------------|
  1. | 1001   ABD   AAA   ABC        1 |
  3. | 1003   ABC   CCC   DDD        1 |
     +---------------------------------+

此处 inlist() 如果第二个和后面的参数中的任何一个等于第一个参数,则生成 1,否则生成 0。

在你的循环中,像 display A1[_n] 这样的东西只会在第一次观察中显示值,因为你循环遍历变量,而不是观察。但是不需要循环。

如果您只想查看满足您标准的第一个观察结果,一种方法是

. list if trackr & sum(trackr) == 1

     +---------------------------------+
     |   ID    A1    A2    A3   trackr |
     |---------------------------------|
  1. | 1001   ABD   AAA   ABC        1 |
     +---------------------------------+

因此 list if sum(inlist("ABC", A1, A2, A3)) == 1 也可以找到第一个这样的观察结果。