显示或打印循环变量以进行调试

时间:2017-08-07 23:23:49

标签: loops conditional stata display

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进行更改后找出并打印。 (我想找出哪个行/列“ABC”被发现。)

我尝试了以上id[_n],但它只能部分工作。

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

1 个答案:

答案 0 :(得分:0)

您不需要循环显示您想要的内容。请参阅SSC的dataex,了解在Stata问题中提供示例数据的更好方法。

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也可以找到第一个这样的观察结果。